@ovok/native 0.4.6 → 0.4.7
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-management/index.js +176 -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-custom-case.js +47 -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-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 +15 -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 +141 -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 +36 -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 +81 -14
- package/lib/commonjs/modules/bt-management/services/devices/custom/custom.device.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/standard-gatt/standard-gatt.devices.js +156 -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/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/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-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/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-management/index.js +16 -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-custom-case.js +47 -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-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 +16 -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 +136 -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 +32 -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 +81 -14
- package/lib/module/modules/bt-management/services/devices/custom/custom.device.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/standard-gatt/standard-gatt.devices.js +149 -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/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/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-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/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-management/index.d.ts +16 -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-custom-case.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 +67 -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 +21 -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 +33 -0
- 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/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/standard-gatt/standard-gatt.devices.d.ts +44 -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/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 +13 -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-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/device-command.d.ts +18 -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/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 +9 -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-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/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-management/index.d.ts +16 -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-custom-case.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 +67 -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 +21 -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 +33 -0
- 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/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/standard-gatt/standard-gatt.devices.d.ts +44 -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/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 +13 -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-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/device-command.d.ts +18 -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/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 +9 -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-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/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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["le32FromHex","le32ToBytes","LepuCommand","lepuNameBytes","lepuNamesFrom","lepuCommandOf","lepuPayloadOf","describeLepuResponseType","isLepuSuccess","FILE_SIZE_OFFSET","MAX_FILE_BYTES","TRANSFER_COMMANDS","GET_FILE_LIST","READ_FILE_START","READ_FILE_DATA","READ_FILE_END","LepuFileTransfer","files","fileIndex","name","totalBytes","content","isSessionOpen","isDone","constructor","params","initialCommands","commandFor","nextCommand","frame","command","includes","undefined","fail","openNextFile","openedFile","appendChunk","closedFile","payload","limit","maxFileBytes","closeFile","length","push","onProgress","receivedBytes","onFile","reason","onError","write","builder","build"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/lepu/lepu.file-transfer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { FrameReadStatus } from "../../../types/frame-read-status.js";
|
|
4
|
+
import { calculateCrc8 } from "../../../utils/calculate-crc-8.js";
|
|
5
|
+
import { hexToByte } from "../../../utils/hex-to-byte.js";
|
|
6
|
+
import { le16FromHex } from "../../../utils/le-16-from-hex.js";
|
|
7
|
+
const COMMAND_INDEX = 1;
|
|
8
|
+
const COMMAND_COMPLEMENT_INDEX = 2;
|
|
9
|
+
const PAYLOAD_LENGTH_INDEX = 5;
|
|
10
|
+
const HEADER_BYTES = 7;
|
|
11
|
+
const CHECKSUM_BYTES = 1;
|
|
12
|
+
const BYTE_MASK = 0xff;
|
|
13
|
+
|
|
14
|
+
/** Start byte, command and its complement: the shortest run that can identify a start. */
|
|
15
|
+
const START_PATTERN_BYTES = 3;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Reads the frame every Lepu device shares.
|
|
19
|
+
*
|
|
20
|
+
* Layout: `start | cmd | ~cmd | type | seq | lenLow lenHigh | payload | crc8`, where the
|
|
21
|
+
* checksum covers every byte before it. The complement of the command byte only narrows the
|
|
22
|
+
* search for a start; the checksum is what actually decides a frame is trustworthy.
|
|
23
|
+
*
|
|
24
|
+
* The start byte is the only part that varies across the family. Most devices use `a5`, a
|
|
25
|
+
* smaller group uses `55`, and a few accept either and settle on one at runtime - so it is a
|
|
26
|
+
* list rather than a single value. Everything else is identical on every device speaking this
|
|
27
|
+
* protocol, which is why it is worth having once rather than once per device.
|
|
28
|
+
*/
|
|
29
|
+
export class LepuFrameReader {
|
|
30
|
+
constructor(startBytes) {
|
|
31
|
+
this.startBytes = startBytes;
|
|
32
|
+
}
|
|
33
|
+
readFrame(buffer) {
|
|
34
|
+
const start = this.findFrameStart(buffer);
|
|
35
|
+
if (start === -1) {
|
|
36
|
+
return {
|
|
37
|
+
status: FrameReadStatus.INCOMPLETE,
|
|
38
|
+
consumedBytes: this.droppableLeadingBytes(buffer)
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const payloadLength = le16FromHex(buffer, start + PAYLOAD_LENGTH_INDEX);
|
|
42
|
+
const frameLength = HEADER_BYTES + payloadLength + CHECKSUM_BYTES;
|
|
43
|
+
if (start + frameLength > buffer.length) {
|
|
44
|
+
return {
|
|
45
|
+
status: FrameReadStatus.INCOMPLETE,
|
|
46
|
+
consumedBytes: start
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const frame = buffer.slice(start, start + frameLength);
|
|
50
|
+
if (!this.hasValidChecksum(frame)) {
|
|
51
|
+
return {
|
|
52
|
+
status: FrameReadStatus.CORRUPT,
|
|
53
|
+
consumedBytes: start + START_PATTERN_BYTES
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
status: FrameReadStatus.COMPLETE,
|
|
58
|
+
consumedBytes: start + frameLength,
|
|
59
|
+
frame
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
isFrameStart(buffer, index) {
|
|
63
|
+
if (!this.startBytes.includes((buffer[index] || "").toLowerCase())) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
const command = hexToByte(buffer[index + COMMAND_INDEX] || "0");
|
|
67
|
+
const complement = hexToByte(buffer[index + COMMAND_COMPLEMENT_INDEX] || "0");
|
|
68
|
+
return command === (~complement & BYTE_MASK);
|
|
69
|
+
}
|
|
70
|
+
findFrameStart(buffer) {
|
|
71
|
+
const lastCandidate = buffer.length - START_PATTERN_BYTES;
|
|
72
|
+
for (let index = 0; index <= lastCandidate; index++) {
|
|
73
|
+
if (this.isFrameStart(buffer, index)) {
|
|
74
|
+
return index;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return -1;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Bytes that cannot begin a frame start, and are therefore safe to drop when no start was
|
|
82
|
+
* found. The trailing bytes are kept because a start pattern may still be arriving.
|
|
83
|
+
*/
|
|
84
|
+
droppableLeadingBytes(buffer) {
|
|
85
|
+
return Math.max(0, buffer.length - (START_PATTERN_BYTES - 1));
|
|
86
|
+
}
|
|
87
|
+
hasValidChecksum(frame) {
|
|
88
|
+
const checksummedBytes = frame.length - CHECKSUM_BYTES;
|
|
89
|
+
const declared = hexToByte(frame[checksummedBytes] || "0");
|
|
90
|
+
return declared === calculateCrc8(frame, checksummedBytes);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=lepu.frame-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FrameReadStatus","calculateCrc8","hexToByte","le16FromHex","COMMAND_INDEX","COMMAND_COMPLEMENT_INDEX","PAYLOAD_LENGTH_INDEX","HEADER_BYTES","CHECKSUM_BYTES","BYTE_MASK","START_PATTERN_BYTES","LepuFrameReader","constructor","startBytes","readFrame","buffer","start","findFrameStart","status","INCOMPLETE","consumedBytes","droppableLeadingBytes","payloadLength","frameLength","length","frame","slice","hasValidChecksum","CORRUPT","COMPLETE","isFrameStart","index","includes","toLowerCase","command","complement","lastCandidate","Math","max","checksummedBytes","declared"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/lepu/lepu.frame-reader.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { hexToByte } from "../../../utils/hex-to-byte.js";
|
|
4
|
+
import { le16FromHex } from "../../../utils/le-16-from-hex.js";
|
|
5
|
+
const COMMAND_INDEX = 1;
|
|
6
|
+
const PAYLOAD_LENGTH_INDEX = 5;
|
|
7
|
+
const HEADER_BYTES = 7;
|
|
8
|
+
|
|
9
|
+
/** The opcode a frame answers, which is what correlates a reply to its request. */
|
|
10
|
+
const lepuCommandOf = frame => hexToByte(frame[COMMAND_INDEX] ?? "0");
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The bytes a frame carries, from its own declared length.
|
|
14
|
+
*
|
|
15
|
+
* Declared rather than derived from what arrived: the frame reader has already checked that
|
|
16
|
+
* the buffer holds the whole frame, so the length field is the payload's end, and trusting
|
|
17
|
+
* the array instead would fold the checksum byte into the data.
|
|
18
|
+
*/
|
|
19
|
+
const lepuPayloadOf = frame => {
|
|
20
|
+
const length = le16FromHex(frame, PAYLOAD_LENGTH_INDEX);
|
|
21
|
+
return frame.slice(HEADER_BYTES, HEADER_BYTES + length);
|
|
22
|
+
};
|
|
23
|
+
export { lepuCommandOf, lepuPayloadOf };
|
|
24
|
+
//# sourceMappingURL=lepu.frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["hexToByte","le16FromHex","COMMAND_INDEX","PAYLOAD_LENGTH_INDEX","HEADER_BYTES","lepuCommandOf","frame","lepuPayloadOf","length","slice"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/lepu/lepu.frame.ts"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,+BAA4B;AACtD,SAASC,WAAW,QAAQ,kCAA+B;AAE3D,MAAMC,aAAa,GAAG,CAAC;AACvB,MAAMC,oBAAoB,GAAG,CAAC;AAC9B,MAAMC,YAAY,GAAG,CAAC;;AAEtB;AACA,MAAMC,aAAa,GAAIC,KAAwB,IAC7CN,SAAS,CAACM,KAAK,CAACJ,aAAa,CAAC,IAAI,GAAG,CAAC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMK,aAAa,GAAID,KAAwB,IAAe;EAC5D,MAAME,MAAM,GAAGP,WAAW,CAACK,KAAK,EAAEH,oBAAoB,CAAC;EAEvD,OAAOG,KAAK,CAACG,KAAK,CAACL,YAAY,EAAEA,YAAY,GAAGI,MAAM,CAAC;AACzD,CAAC;AAED,SAASH,aAAa,EAAEE,aAAa","ignoreList":[]}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { hexToByte } from "../../../utils/hex-to-byte.js";
|
|
4
|
+
import { LepuCommand } from "./lepu.commands.js";
|
|
5
|
+
import { parseLepuDeviceInfo } from "./lepu.device-info.js";
|
|
6
|
+
import { describeLepuResponseType, isLepuSuccess } from "./lepu.response-type.js";
|
|
7
|
+
const COMMAND_INDEX = 1;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Asks a Lepu device what it is before sending it anything that acts.
|
|
11
|
+
*
|
|
12
|
+
* The family shares one frame format, one checksum and one opcode space, but not one
|
|
13
|
+
* meaning: `0x08` polls realtime data on a BP2, starts a blood-pressure measurement on an
|
|
14
|
+
* AirBp and starts an ECG on a Lepod. A frame built for the wrong device is therefore
|
|
15
|
+
* perfectly well-formed - the CRC is computed the same way on every one of them - so
|
|
16
|
+
* nothing in the protocol catches a driver bound to the wrong hardware. What comes back is
|
|
17
|
+
* a cuff inflating on someone's arm because a name matched during a scan.
|
|
18
|
+
*
|
|
19
|
+
* `GET_INFO` is the one command that cannot cause that: it is generic, inert, and answered
|
|
20
|
+
* identically family-wide. So it goes first, and everything else waits on its reply.
|
|
21
|
+
*
|
|
22
|
+
* A declaration that names the models it was written for is refused permanently when the
|
|
23
|
+
* device answers with a different one. A declaration that names none is identified by the
|
|
24
|
+
* advertised name it already matched, which is the basis the vendor's own SDK binds every
|
|
25
|
+
* one of its products on; it is asked what it is anyway, and the answer reported, because
|
|
26
|
+
* that is the only place these model numbers exist - the vendor never reads the field back,
|
|
27
|
+
* so there is no table of them to copy.
|
|
28
|
+
*
|
|
29
|
+
* A reply that never arrives leaves the gate closed and nothing sent, which the data
|
|
30
|
+
* processor's stuck-data timeout reports and disconnects on. That is the watchdog for this
|
|
31
|
+
* too - the protocol has no retry of its own, so a dropped reply is recovered by
|
|
32
|
+
* reconnecting rather than by asking again.
|
|
33
|
+
*/
|
|
34
|
+
export class LepuIdentityGate {
|
|
35
|
+
isIdentified = false;
|
|
36
|
+
isRefused = false;
|
|
37
|
+
constructor(params) {
|
|
38
|
+
this.params = params;
|
|
39
|
+
}
|
|
40
|
+
initialCommands = () => [this.commandFor(LepuCommand.GET_INFO)];
|
|
41
|
+
nextCommand = frame => {
|
|
42
|
+
if (this.isRefused) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
if (this.isIdentified) {
|
|
46
|
+
return this.poll();
|
|
47
|
+
}
|
|
48
|
+
return this.admit(frame);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Decides on the reply to `GET_INFO`.
|
|
53
|
+
*
|
|
54
|
+
* A frame that is not that reply leaves the gate as it was rather than provoking another
|
|
55
|
+
* command, because the only command outstanding is the one still being waited on.
|
|
56
|
+
*
|
|
57
|
+
* A reply that is that command but carries an error type is refused rather than parsed.
|
|
58
|
+
* The payload of an error is the reason for it, so reading a model number out of it would
|
|
59
|
+
* identify the hardware from an error code.
|
|
60
|
+
*/
|
|
61
|
+
admit = frame => {
|
|
62
|
+
if (hexToByte(frame[COMMAND_INDEX] ?? "0") !== LepuCommand.GET_INFO) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
if (!isLepuSuccess(frame)) {
|
|
66
|
+
return this.refuse(`the device would not say what it is: ${describeLepuResponseType(frame)}`);
|
|
67
|
+
}
|
|
68
|
+
const info = parseLepuDeviceInfo(frame);
|
|
69
|
+
if (!info) {
|
|
70
|
+
return this.refuse("the device answered with a frame too short to hold its own model number");
|
|
71
|
+
}
|
|
72
|
+
this.params.onIdentified?.(info);
|
|
73
|
+
if (this.params.pollCommand === undefined) {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
const isNarrowed = this.params.expectedDeviceTypes.length > 0;
|
|
77
|
+
if (isNarrowed && !this.params.expectedDeviceTypes.includes(info.deviceType)) {
|
|
78
|
+
return this.refuse(`the hardware reported model ${info.deviceType} (branch "${info.branchCode}"), which this declaration was not written for`);
|
|
79
|
+
}
|
|
80
|
+
this.isIdentified = true;
|
|
81
|
+
return this.poll();
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
/** Closes the gate for good. There is no state a refused device can be talked back from. */
|
|
85
|
+
refuse = reason => {
|
|
86
|
+
this.isRefused = true;
|
|
87
|
+
this.params.onRefused(reason);
|
|
88
|
+
return undefined;
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/** Nothing, for a declaration that asks what the device is and stops there. */
|
|
92
|
+
poll = () => this.params.pollCommand === undefined ? undefined : [this.commandFor(this.params.pollCommand)];
|
|
93
|
+
commandFor = command => ({
|
|
94
|
+
...this.params.write,
|
|
95
|
+
frame: this.params.builder.build(command)
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=lepu.identity-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["hexToByte","LepuCommand","parseLepuDeviceInfo","describeLepuResponseType","isLepuSuccess","COMMAND_INDEX","LepuIdentityGate","isIdentified","isRefused","constructor","params","initialCommands","commandFor","GET_INFO","nextCommand","frame","undefined","poll","admit","refuse","info","onIdentified","pollCommand","isNarrowed","expectedDeviceTypes","length","includes","deviceType","branchCode","reason","onRefused","command","write","builder","build"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/lepu/lepu.identity-gate.ts"],"mappings":";;AAEA,SAASA,SAAS,QAAQ,+BAA4B;AAGtD,SAASC,WAAW,QAAQ,oBAAiB;AAC7C,SAAyBC,mBAAmB,QAAQ,uBAAoB;AACxE,SACEC,wBAAwB,EACxBC,aAAa,QACR,yBAAsB;AAmC7B,MAAMC,aAAa,GAAG,CAAC;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,CAA6B;EAChDC,YAAY,GAAG,KAAK;EACpBC,SAAS,GAAG,KAAK;EAElBC,WAAWA,CAAkBC,MAA8B,EAAE;IAAA,KAAhCA,MAA8B,GAA9BA,MAA8B;EAAG;EAE9DC,eAAe,GAAGA,CAAA,KAAgC,CACvD,IAAI,CAACC,UAAU,CAACX,WAAW,CAACY,QAAQ,CAAC,CACtC;EAEMC,WAAW,GAChBC,KAAwB,IACiB;IACzC,IAAI,IAAI,CAACP,SAAS,EAAE;MAClB,OAAOQ,SAAS;IAClB;IAEA,IAAI,IAAI,CAACT,YAAY,EAAE;MACrB,OAAO,IAAI,CAACU,IAAI,CAAC,CAAC;IACpB;IAEA,OAAO,IAAI,CAACC,KAAK,CAACH,KAAK,CAAC;EAC1B,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACUG,KAAK,GACXH,KAAwB,IACiB;IACzC,IAAIf,SAAS,CAACe,KAAK,CAACV,aAAa,CAAC,IAAI,GAAG,CAAC,KAAKJ,WAAW,CAACY,QAAQ,EAAE;MACnE,OAAOG,SAAS;IAClB;IAEA,IAAI,CAACZ,aAAa,CAACW,KAAK,CAAC,EAAE;MACzB,OAAO,IAAI,CAACI,MAAM,CAChB,wCAAwChB,wBAAwB,CAACY,KAAK,CAAC,EACzE,CAAC;IACH;IAEA,MAAMK,IAAI,GAAGlB,mBAAmB,CAACa,KAAK,CAAC;IAEvC,IAAI,CAACK,IAAI,EAAE;MACT,OAAO,IAAI,CAACD,MAAM,CAChB,yEACF,CAAC;IACH;IAEA,IAAI,CAACT,MAAM,CAACW,YAAY,GAAGD,IAAI,CAAC;IAEhC,IAAI,IAAI,CAACV,MAAM,CAACY,WAAW,KAAKN,SAAS,EAAE;MACzC,OAAOA,SAAS;IAClB;IAEA,MAAMO,UAAU,GAAG,IAAI,CAACb,MAAM,CAACc,mBAAmB,CAACC,MAAM,GAAG,CAAC;IAE7D,IAAIF,UAAU,IAAI,CAAC,IAAI,CAACb,MAAM,CAACc,mBAAmB,CAACE,QAAQ,CAACN,IAAI,CAACO,UAAU,CAAC,EAAE;MAC5E,OAAO,IAAI,CAACR,MAAM,CAChB,+BAA+BC,IAAI,CAACO,UAAU,aAAaP,IAAI,CAACQ,UAAU,gDAC5E,CAAC;IACH;IAEA,IAAI,CAACrB,YAAY,GAAG,IAAI;IAExB,OAAO,IAAI,CAACU,IAAI,CAAC,CAAC;EACpB,CAAC;;EAED;EACQE,MAAM,GAAIU,MAAc,IAAgB;IAC9C,IAAI,CAACrB,SAAS,GAAG,IAAI;IACrB,IAAI,CAACE,MAAM,CAACoB,SAAS,CAACD,MAAM,CAAC;IAE7B,OAAOb,SAAS;EAClB,CAAC;;EAED;EACQC,IAAI,GAAGA,CAAA,KACb,IAAI,CAACP,MAAM,CAACY,WAAW,KAAKN,SAAS,GACjCA,SAAS,GACT,CAAC,IAAI,CAACJ,UAAU,CAAC,IAAI,CAACF,MAAM,CAACY,WAAW,CAAC,CAAC;EAExCV,UAAU,GAAImB,OAAe,KAAqB;IACxD,GAAG,IAAI,CAACrB,MAAM,CAACsB,KAAK;IACpBjB,KAAK,EAAE,IAAI,CAACL,MAAM,CAACuB,OAAO,CAACC,KAAK,CAACH,OAAO;EAC1C,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { LEPU_DEVICE_NAMES } from "./lepu.device-names.js";
|
|
4
|
+
const REGEXP_SPECIAL = /[.*+?^${}()|[\]\\]/g;
|
|
5
|
+
const escapeRegExp = value => value.replace(REGEXP_SPECIAL, "\\$&");
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Builds a matcher for one advertised name that cannot also match a longer one.
|
|
9
|
+
*
|
|
10
|
+
* The vendor tests these names with a substring check in a hand-ordered cascade, so `BP2`
|
|
11
|
+
* only fails to match a BP2W because `BP2W` happens to be checked first. Order is a fragile
|
|
12
|
+
* place to keep a safety property: it lives in whoever wrote the list, is invisible at the
|
|
13
|
+
* point of use, and an insertion in the wrong place silently binds the wrong driver.
|
|
14
|
+
*
|
|
15
|
+
* Here the exclusions are derived instead. Every name in the vocabulary that extends this
|
|
16
|
+
* one becomes a negative lookahead, so the matcher is correct wherever it is used and in
|
|
17
|
+
* whatever order it is tried.
|
|
18
|
+
*
|
|
19
|
+
* The match is deliberately open at the end, because these devices advertise a serial after
|
|
20
|
+
* the model - `BP2 1234` - and the serial's shape varies across the family.
|
|
21
|
+
*/
|
|
22
|
+
export const lepuNameMatch = (name, vocabulary = LEPU_DEVICE_NAMES) => {
|
|
23
|
+
const extensions = vocabulary.filter(other => other !== name && other.startsWith(name)).map(other => escapeRegExp(other.slice(name.length)));
|
|
24
|
+
const exclusion = extensions.length > 0 ? `(?!${extensions.join("|")})` : "";
|
|
25
|
+
return new RegExp(`^${escapeRegExp(name)}${exclusion}`);
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=lepu.name-match.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["LEPU_DEVICE_NAMES","REGEXP_SPECIAL","escapeRegExp","value","replace","lepuNameMatch","name","vocabulary","extensions","filter","other","startsWith","map","slice","length","exclusion","join","RegExp"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/lepu/lepu.name-match.ts"],"mappings":";;AAAA,SAASA,iBAAiB,QAAQ,wBAAqB;AAEvD,MAAMC,cAAc,GAAG,qBAAqB;AAE5C,MAAMC,YAAY,GAAIC,KAAa,IACjCA,KAAK,CAACC,OAAO,CAACH,cAAc,EAAE,MAAM,CAAC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMI,aAAa,GAAGA,CAC3BC,IAAY,EACZC,UAA6B,GAAGP,iBAAiB,KACtC;EACX,MAAMQ,UAAU,GAAGD,UAAU,CAC1BE,MAAM,CAAEC,KAAK,IAAKA,KAAK,KAAKJ,IAAI,IAAII,KAAK,CAACC,UAAU,CAACL,IAAI,CAAC,CAAC,CAC3DM,GAAG,CAAEF,KAAK,IAAKR,YAAY,CAACQ,KAAK,CAACG,KAAK,CAACP,IAAI,CAACQ,MAAM,CAAC,CAAC,CAAC;EAEzD,MAAMC,SAAS,GACbP,UAAU,CAACM,MAAM,GAAG,CAAC,GAAG,MAAMN,UAAU,CAACQ,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE;EAE5D,OAAO,IAAIC,MAAM,CAAC,IAAIf,YAAY,CAACI,IAAI,CAAC,GAAGS,SAAS,EAAE,CAAC;AACzD,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { hexToByte } from "../../../utils/hex-to-byte.js";
|
|
4
|
+
|
|
5
|
+
/** Byte 3 of every frame: the direction on a request, the outcome on a reply. */
|
|
6
|
+
const RESPONSE_TYPE_INDEX = 3;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* What a Lepu device says about the request it just answered.
|
|
10
|
+
*
|
|
11
|
+
* Only `SUCCESS` means the payload holds what was asked for. Every other value is an error
|
|
12
|
+
* whose payload is not the requested data, so a reply has to be checked before it is
|
|
13
|
+
* decoded - otherwise a refusal is read as a reading, out of whatever bytes happen to
|
|
14
|
+
* follow the header.
|
|
15
|
+
*/
|
|
16
|
+
const LepuResponseType = {
|
|
17
|
+
/** A request, phone to device. Never seen on a reply. */
|
|
18
|
+
REQUEST: 0x00,
|
|
19
|
+
SUCCESS: 0x01,
|
|
20
|
+
/** The device rejected our checksum. */
|
|
21
|
+
CRC_ERROR: 0x02,
|
|
22
|
+
FILE_NOT_FOUND: 0xe0,
|
|
23
|
+
FILE_READ_FAILED: 0xe1,
|
|
24
|
+
FILE_WRITE_FAILED: 0xe2,
|
|
25
|
+
PARAMETER_ILLEGAL: 0xf1,
|
|
26
|
+
PERMISSION_DENIED: 0xf2,
|
|
27
|
+
DECRYPT_FAILED: 0xf3,
|
|
28
|
+
/** Mid-measurement or otherwise occupied. Worth backing off rather than giving up. */
|
|
29
|
+
DEVICE_BUSY: 0xfb,
|
|
30
|
+
COMMAND_FORMAT_ERROR: 0xfc,
|
|
31
|
+
/** The opcode is unknown to this firmware, which is how a feature is detected. */
|
|
32
|
+
COMMAND_NOT_SUPPORTED: 0xfd,
|
|
33
|
+
ERROR: 0xff
|
|
34
|
+
};
|
|
35
|
+
const RESPONSE_TYPE_NAMES = {
|
|
36
|
+
[LepuResponseType.CRC_ERROR]: "it rejected our checksum",
|
|
37
|
+
[LepuResponseType.FILE_NOT_FOUND]: "the file does not exist",
|
|
38
|
+
[LepuResponseType.FILE_READ_FAILED]: "the file could not be read",
|
|
39
|
+
[LepuResponseType.FILE_WRITE_FAILED]: "the file could not be written",
|
|
40
|
+
[LepuResponseType.PARAMETER_ILLEGAL]: "the parameter was rejected",
|
|
41
|
+
[LepuResponseType.PERMISSION_DENIED]: "permission was denied",
|
|
42
|
+
[LepuResponseType.DECRYPT_FAILED]: "it could not decrypt the request",
|
|
43
|
+
[LepuResponseType.DEVICE_BUSY]: "it is busy",
|
|
44
|
+
[LepuResponseType.COMMAND_FORMAT_ERROR]: "the command was malformed",
|
|
45
|
+
[LepuResponseType.COMMAND_NOT_SUPPORTED]: "the opcode is unknown to this firmware",
|
|
46
|
+
[LepuResponseType.ERROR]: "it reported a generic error"
|
|
47
|
+
};
|
|
48
|
+
const lepuResponseType = frame => hexToByte(frame[RESPONSE_TYPE_INDEX] ?? "0");
|
|
49
|
+
const isLepuSuccess = frame => lepuResponseType(frame) === LepuResponseType.SUCCESS;
|
|
50
|
+
|
|
51
|
+
/** Why a device refused, in words, for an error a person will read. */
|
|
52
|
+
const describeLepuResponseType = frame => {
|
|
53
|
+
const type = lepuResponseType(frame);
|
|
54
|
+
const known = RESPONSE_TYPE_NAMES[type];
|
|
55
|
+
const code = `0x${type.toString(16).padStart(2, "0")}`;
|
|
56
|
+
return known ? `${known} (${code})` : `it answered with ${code}`;
|
|
57
|
+
};
|
|
58
|
+
export { describeLepuResponseType, isLepuSuccess, LepuResponseType, lepuResponseType };
|
|
59
|
+
//# sourceMappingURL=lepu.response-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["hexToByte","RESPONSE_TYPE_INDEX","LepuResponseType","REQUEST","SUCCESS","CRC_ERROR","FILE_NOT_FOUND","FILE_READ_FAILED","FILE_WRITE_FAILED","PARAMETER_ILLEGAL","PERMISSION_DENIED","DECRYPT_FAILED","DEVICE_BUSY","COMMAND_FORMAT_ERROR","COMMAND_NOT_SUPPORTED","ERROR","RESPONSE_TYPE_NAMES","lepuResponseType","frame","isLepuSuccess","describeLepuResponseType","type","known","code","toString","padStart"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/lepu/lepu.response-type.ts"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,+BAA4B;;AAEtD;AACA,MAAMC,mBAAmB,GAAG,CAAC;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAG;EACvB;EACAC,OAAO,EAAE,IAAI;EAEbC,OAAO,EAAE,IAAI;EAEb;EACAC,SAAS,EAAE,IAAI;EAEfC,cAAc,EAAE,IAAI;EACpBC,gBAAgB,EAAE,IAAI;EACtBC,iBAAiB,EAAE,IAAI;EACvBC,iBAAiB,EAAE,IAAI;EACvBC,iBAAiB,EAAE,IAAI;EACvBC,cAAc,EAAE,IAAI;EAEpB;EACAC,WAAW,EAAE,IAAI;EAEjBC,oBAAoB,EAAE,IAAI;EAE1B;EACAC,qBAAqB,EAAE,IAAI;EAE3BC,KAAK,EAAE;AACT,CAAU;AAEV,MAAMC,mBAAqD,GAAG;EAC5D,CAACd,gBAAgB,CAACG,SAAS,GAAG,0BAA0B;EACxD,CAACH,gBAAgB,CAACI,cAAc,GAAG,yBAAyB;EAC5D,CAACJ,gBAAgB,CAACK,gBAAgB,GAAG,4BAA4B;EACjE,CAACL,gBAAgB,CAACM,iBAAiB,GAAG,+BAA+B;EACrE,CAACN,gBAAgB,CAACO,iBAAiB,GAAG,4BAA4B;EAClE,CAACP,gBAAgB,CAACQ,iBAAiB,GAAG,uBAAuB;EAC7D,CAACR,gBAAgB,CAACS,cAAc,GAAG,kCAAkC;EACrE,CAACT,gBAAgB,CAACU,WAAW,GAAG,YAAY;EAC5C,CAACV,gBAAgB,CAACW,oBAAoB,GAAG,2BAA2B;EACpE,CAACX,gBAAgB,CAACY,qBAAqB,GACrC,wCAAwC;EAC1C,CAACZ,gBAAgB,CAACa,KAAK,GAAG;AAC5B,CAAC;AAED,MAAME,gBAAgB,GAAIC,KAAwB,IAChDlB,SAAS,CAACkB,KAAK,CAACjB,mBAAmB,CAAC,IAAI,GAAG,CAAC;AAE9C,MAAMkB,aAAa,GAAID,KAAwB,IAC7CD,gBAAgB,CAACC,KAAK,CAAC,KAAKhB,gBAAgB,CAACE,OAAO;;AAEtD;AACA,MAAMgB,wBAAwB,GAAIF,KAAwB,IAAa;EACrE,MAAMG,IAAI,GAAGJ,gBAAgB,CAACC,KAAK,CAAC;EACpC,MAAMI,KAAK,GAAGN,mBAAmB,CAACK,IAAI,CAAC;EACvC,MAAME,IAAI,GAAG,KAAKF,IAAI,CAACG,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;EAEtD,OAAOH,KAAK,GAAG,GAAGA,KAAK,KAAKC,IAAI,GAAG,GAAG,oBAAoBA,IAAI,EAAE;AAClE,CAAC;AAED,SACEH,wBAAwB,EACxBD,aAAa,EACbjB,gBAAgB,EAChBe,gBAAgB","ignoreList":[]}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { defineCustomDevice } from "../../custom/define-custom-device.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Declares a device from the Lepu/Viatom family.
|
|
7
|
+
*
|
|
8
|
+
* Thirty products in that family share one frame format, one CRC and one generic opcode
|
|
9
|
+
* space, and they differ in only three things: which characteristics they expose, what
|
|
10
|
+
* their payload means, and what they call themselves. The first of those is the same for
|
|
11
|
+
* almost all of them and is recorded here; the other two belong to the product and are
|
|
12
|
+
* asked of the caller.
|
|
13
|
+
*
|
|
14
|
+
* Two things a declaration cannot supply, and where they come from:
|
|
15
|
+
*
|
|
16
|
+
* - **The model numbers.** A device reports one in its information reply, but the vendor's
|
|
17
|
+
* own SDK never reads that field back - it binds a driver from the advertised name - so
|
|
18
|
+
* no table of them exists to copy. Declare the device without a `pollCommand`, connect
|
|
19
|
+
* once, and it reports what it is without sending anything that acts.
|
|
20
|
+
* - **The payload layout.** Every product decodes differently, and a guessed offset yields
|
|
21
|
+
* a plausible wrong reading rather than an error. Declared cases are the caller's.
|
|
22
|
+
*
|
|
23
|
+
* Some of these products negotiate encryption in the vendor app (`Bp2`, `Er2` and the
|
|
24
|
+
* oximeters do; `Er1`, `Er3`, `Bp3` and `Lepod` do not). The SDK speaks the cleartext
|
|
25
|
+
* protocol, which is what the BP2 already runs on in production, so a product that turns out
|
|
26
|
+
* to require the handshake will identify itself and then stop rather than mis-report.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Most of the family. The vendor's own SDK reference lists 71 products on these three
|
|
31
|
+
* characteristics - the BP2 and BP3 monitors, Er1/Er2/Er3, Lepod, the whole O2Ring and
|
|
32
|
+
* Oxyfit range, Checkme, AirBp - and the SDK's own BP2 driver has run against them on real
|
|
33
|
+
* hardware.
|
|
34
|
+
*/
|
|
35
|
+
const STANDARD_SERVICE = "14839ac4-7d7e-415c-9a42-167340cf2339";
|
|
36
|
+
const STANDARD_WRITE = "8b00ace7-eb0b-49b0-bbe9-9aee0a26e1a3";
|
|
37
|
+
const STANDARD_NOTIFY = "0734594a-a8e7-4b1a-a6b1-cd5243059a57";
|
|
38
|
+
|
|
39
|
+
/** Nine products in the vendor's reference: O2Ring S, the PF-10 wearables and the BBSM bands. */
|
|
40
|
+
const AW1_SERVICE = "e8fb0001-a14b-98f9-831b-4e2941d01248";
|
|
41
|
+
const AW1_WRITE = "e8fb0002-a14b-98f9-831b-4e2941d01248";
|
|
42
|
+
const AW1_NOTIFY = "e8fb0003-a14b-98f9-831b-4e2941d01248";
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Read from an OEM build rather than from the vendor's published reference, which documents
|
|
46
|
+
* no product on these characteristics. Real, but unconfirmed by the vendor and untried here.
|
|
47
|
+
*/
|
|
48
|
+
const DING_SERVICE = "0000fe60-0000-1000-8000-00805f9b34fb";
|
|
49
|
+
const DING_WRITE = "0000fe61-0000-1000-8000-00805f9b34fb";
|
|
50
|
+
const DING_NOTIFY = "0000fe62-0000-1000-8000-00805f9b34fb";
|
|
51
|
+
|
|
52
|
+
/** Also from an OEM build only, and likewise absent from the vendor's published reference. */
|
|
53
|
+
const AI_TELE_SERVICE = "00002760-08c2-11e1-9073-0e8ac72e5450";
|
|
54
|
+
const AI_TELE_WRITE = "00002760-08c2-11e1-9073-0e8ac72e5401";
|
|
55
|
+
const AI_TELE_NOTIFY = "00002760-08c2-11e1-9073-0e8ac72e5402";
|
|
56
|
+
|
|
57
|
+
/** What the vendor app asks for on every one of these links but the Er2's. */
|
|
58
|
+
const PREFERRED_MTU = 247;
|
|
59
|
+
|
|
60
|
+
/** The Er2 negotiates the link minimum, which is why commands are split to fit. */
|
|
61
|
+
const MINIMUM_MTU = 23;
|
|
62
|
+
|
|
63
|
+
/** Long enough for a device that waits on a person to start a measurement. */
|
|
64
|
+
const DEFAULT_STUCK_TIMEOUT_MS = 60_000;
|
|
65
|
+
const START_BYTE = "a5";
|
|
66
|
+
/**
|
|
67
|
+
* The characteristics each group of products exposes, read from the vendor's own managers.
|
|
68
|
+
*
|
|
69
|
+
* `standard` and `aw1` match the vendor's published SDK reference exactly, and `standard`
|
|
70
|
+
* also matches the SDK's existing BP2 driver, which has run against hardware on precisely
|
|
71
|
+
* these UUIDs. `ding` and `aiTele` were read from an OEM build and the vendor documents no
|
|
72
|
+
* product on them, so they are the two entries here that nothing independent confirms.
|
|
73
|
+
*/
|
|
74
|
+
const lepuTransports = {
|
|
75
|
+
standard: {
|
|
76
|
+
serviceUuid: STANDARD_SERVICE,
|
|
77
|
+
notifyUuid: STANDARD_NOTIFY,
|
|
78
|
+
writeUuid: STANDARD_WRITE,
|
|
79
|
+
preferredMtu: PREFERRED_MTU
|
|
80
|
+
},
|
|
81
|
+
/** The same characteristics on a link that will not grow past the minimum. */
|
|
82
|
+
standardSmallMtu: {
|
|
83
|
+
serviceUuid: STANDARD_SERVICE,
|
|
84
|
+
notifyUuid: STANDARD_NOTIFY,
|
|
85
|
+
writeUuid: STANDARD_WRITE,
|
|
86
|
+
preferredMtu: MINIMUM_MTU
|
|
87
|
+
},
|
|
88
|
+
aw1: {
|
|
89
|
+
serviceUuid: AW1_SERVICE,
|
|
90
|
+
notifyUuid: AW1_NOTIFY,
|
|
91
|
+
writeUuid: AW1_WRITE,
|
|
92
|
+
preferredMtu: PREFERRED_MTU
|
|
93
|
+
},
|
|
94
|
+
ding: {
|
|
95
|
+
serviceUuid: DING_SERVICE,
|
|
96
|
+
notifyUuid: DING_NOTIFY,
|
|
97
|
+
writeUuid: DING_WRITE,
|
|
98
|
+
preferredMtu: PREFERRED_MTU
|
|
99
|
+
},
|
|
100
|
+
aiTele: {
|
|
101
|
+
serviceUuid: AI_TELE_SERVICE,
|
|
102
|
+
notifyUuid: AI_TELE_NOTIFY,
|
|
103
|
+
writeUuid: AI_TELE_WRITE,
|
|
104
|
+
preferredMtu: PREFERRED_MTU
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const COMMAND_BYTE = 1;
|
|
108
|
+
const lepuDevice = params => {
|
|
109
|
+
const transport = lepuTransports[params.transport ?? "standard"];
|
|
110
|
+
return defineCustomDevice({
|
|
111
|
+
id: params.id,
|
|
112
|
+
nameMatch: params.nameMatch,
|
|
113
|
+
stuckDataTimeoutMs: params.stuckDataTimeoutMs ?? DEFAULT_STUCK_TIMEOUT_MS,
|
|
114
|
+
preferredMtu: transport.preferredMtu,
|
|
115
|
+
lepu: {
|
|
116
|
+
startBytes: [START_BYTE],
|
|
117
|
+
write: {
|
|
118
|
+
serviceUuid: transport.serviceUuid,
|
|
119
|
+
characteristicUuid: transport.writeUuid
|
|
120
|
+
},
|
|
121
|
+
expectedDeviceTypes: [...(params.expectedDeviceTypes ?? [])],
|
|
122
|
+
...(params.pollCommand === undefined ? {} : {
|
|
123
|
+
pollCommand: params.pollCommand
|
|
124
|
+
})
|
|
125
|
+
},
|
|
126
|
+
services: [{
|
|
127
|
+
uuid: transport.serviceUuid,
|
|
128
|
+
monitor: [{
|
|
129
|
+
uuid: transport.notifyUuid,
|
|
130
|
+
frame: {
|
|
131
|
+
minLengthBytes: params.minLengthBytes
|
|
132
|
+
},
|
|
133
|
+
caseSelectorBytes: params.caseSelectorBytes ?? [COMMAND_BYTE],
|
|
134
|
+
cases: params.cases
|
|
135
|
+
}]
|
|
136
|
+
}]
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
export { lepuDevice, lepuTransports };
|
|
140
|
+
//# sourceMappingURL=lepu.transports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["defineCustomDevice","STANDARD_SERVICE","STANDARD_WRITE","STANDARD_NOTIFY","AW1_SERVICE","AW1_WRITE","AW1_NOTIFY","DING_SERVICE","DING_WRITE","DING_NOTIFY","AI_TELE_SERVICE","AI_TELE_WRITE","AI_TELE_NOTIFY","PREFERRED_MTU","MINIMUM_MTU","DEFAULT_STUCK_TIMEOUT_MS","START_BYTE","lepuTransports","standard","serviceUuid","notifyUuid","writeUuid","preferredMtu","standardSmallMtu","aw1","ding","aiTele","COMMAND_BYTE","lepuDevice","params","transport","id","nameMatch","stuckDataTimeoutMs","lepu","startBytes","write","characteristicUuid","expectedDeviceTypes","pollCommand","undefined","services","uuid","monitor","frame","minLengthBytes","caseSelectorBytes","cases"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/lepu/lepu.transports.ts"],"mappings":";;AAEA,SAASA,kBAAkB,QAAQ,sCAAmC;;AAEtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAG,sCAAsC;AAC/D,MAAMC,cAAc,GAAG,sCAAsC;AAC7D,MAAMC,eAAe,GAAG,sCAAsC;;AAE9D;AACA,MAAMC,WAAW,GAAG,sCAAsC;AAC1D,MAAMC,SAAS,GAAG,sCAAsC;AACxD,MAAMC,UAAU,GAAG,sCAAsC;;AAEzD;AACA;AACA;AACA;AACA,MAAMC,YAAY,GAAG,sCAAsC;AAC3D,MAAMC,UAAU,GAAG,sCAAsC;AACzD,MAAMC,WAAW,GAAG,sCAAsC;;AAE1D;AACA,MAAMC,eAAe,GAAG,sCAAsC;AAC9D,MAAMC,aAAa,GAAG,sCAAsC;AAC5D,MAAMC,cAAc,GAAG,sCAAsC;;AAE7D;AACA,MAAMC,aAAa,GAAG,GAAG;;AAEzB;AACA,MAAMC,WAAW,GAAG,EAAE;;AAEtB;AACA,MAAMC,wBAAwB,GAAG,MAAM;AAEvC,MAAMC,UAAU,GAAG,IAAI;AASvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,cAAc,GAAG;EACrBC,QAAQ,EAAE;IACRC,WAAW,EAAElB,gBAAgB;IAC7BmB,UAAU,EAAEjB,eAAe;IAC3BkB,SAAS,EAAEnB,cAAc;IACzBoB,YAAY,EAAET;EAChB,CAAC;EAED;EACAU,gBAAgB,EAAE;IAChBJ,WAAW,EAAElB,gBAAgB;IAC7BmB,UAAU,EAAEjB,eAAe;IAC3BkB,SAAS,EAAEnB,cAAc;IACzBoB,YAAY,EAAER;EAChB,CAAC;EAEDU,GAAG,EAAE;IACHL,WAAW,EAAEf,WAAW;IACxBgB,UAAU,EAAEd,UAAU;IACtBe,SAAS,EAAEhB,SAAS;IACpBiB,YAAY,EAAET;EAChB,CAAC;EAEDY,IAAI,EAAE;IACJN,WAAW,EAAEZ,YAAY;IACzBa,UAAU,EAAEX,WAAW;IACvBY,SAAS,EAAEb,UAAU;IACrBc,YAAY,EAAET;EAChB,CAAC;EAEDa,MAAM,EAAE;IACNP,WAAW,EAAET,eAAe;IAC5BU,UAAU,EAAER,cAAc;IAC1BS,SAAS,EAAEV,aAAa;IACxBW,YAAY,EAAET;EAChB;AACF,CAAkD;AAmDlD,MAAMc,YAAY,GAAG,CAAC;AAEtB,MAAMC,UAAU,GAAIC,MAAwB,IAA6B;EACvE,MAAMC,SAAS,GAAGb,cAAc,CAACY,MAAM,CAACC,SAAS,IAAI,UAAU,CAAC;EAEhE,OAAO9B,kBAAkB,CAAC;IACxB+B,EAAE,EAAEF,MAAM,CAACE,EAAE;IACbC,SAAS,EAAEH,MAAM,CAACG,SAAS;IAC3BC,kBAAkB,EAAEJ,MAAM,CAACI,kBAAkB,IAAIlB,wBAAwB;IACzEO,YAAY,EAAEQ,SAAS,CAACR,YAAY;IACpCY,IAAI,EAAE;MACJC,UAAU,EAAE,CAACnB,UAAU,CAAC;MACxBoB,KAAK,EAAE;QACLjB,WAAW,EAAEW,SAAS,CAACX,WAAW;QAClCkB,kBAAkB,EAAEP,SAAS,CAACT;MAChC,CAAC;MACDiB,mBAAmB,EAAE,CAAC,IAAIT,MAAM,CAACS,mBAAmB,IAAI,EAAE,CAAC,CAAC;MAC5D,IAAIT,MAAM,CAACU,WAAW,KAAKC,SAAS,GAChC,CAAC,CAAC,GACF;QAAED,WAAW,EAAEV,MAAM,CAACU;MAAY,CAAC;IACzC,CAAC;IACDE,QAAQ,EAAE,CACR;MACEC,IAAI,EAAEZ,SAAS,CAACX,WAAW;MAC3BwB,OAAO,EAAE,CACP;QACED,IAAI,EAAEZ,SAAS,CAACV,UAAU;QAC1BwB,KAAK,EAAE;UAAEC,cAAc,EAAEhB,MAAM,CAACgB;QAAe,CAAC;QAChDC,iBAAiB,EAAEjB,MAAM,CAACiB,iBAAiB,IAAI,CAACnB,YAAY,CAAC;QAC7DoB,KAAK,EAAElB,MAAM,CAACkB;MAChB,CAAC;IAEL,CAAC;EAEL,CAAC,CAAC;AACJ,CAAC;AAED,SAASnB,UAAU,EAAEX,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { hexToBytes } from "../../utils/hex-to-bytes.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Sends the same commands on connect and after every frame.
|
|
7
|
+
*
|
|
8
|
+
* This is what the SDK did before a device could express anything else, and it remains
|
|
9
|
+
* right for the devices that only ever ask one question: a poll goes out, a reading comes
|
|
10
|
+
* back, and the answer is another poll. Keeping it as a named policy rather than as
|
|
11
|
+
* behaviour built into the transport is what lets a device replace it without every other
|
|
12
|
+
* device changing.
|
|
13
|
+
*/
|
|
14
|
+
class PollingCommandSequencer {
|
|
15
|
+
constructor(commands) {
|
|
16
|
+
this.commands = commands;
|
|
17
|
+
}
|
|
18
|
+
initialCommands = () => this.commands;
|
|
19
|
+
nextCommand = () => this.commands;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Builds the polling policy a device's declared services already describe.
|
|
24
|
+
*
|
|
25
|
+
* A service without a write characteristic contributes nothing, so a listen-only device
|
|
26
|
+
* gets an empty policy and is never written to.
|
|
27
|
+
*/
|
|
28
|
+
const pollingSequencerFor = services => new PollingCommandSequencer(services.flatMap(service => service.writeUuid ? [{
|
|
29
|
+
serviceUuid: service.uuid,
|
|
30
|
+
characteristicUuid: service.writeUuid.uuid,
|
|
31
|
+
frame: hexToBytes(service.writeUuid.mainCommandUuid)
|
|
32
|
+
}] : []));
|
|
33
|
+
export { PollingCommandSequencer, pollingSequencerFor };
|
|
34
|
+
//# sourceMappingURL=polling-command-sequencer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["hexToBytes","PollingCommandSequencer","constructor","commands","initialCommands","nextCommand","pollingSequencerFor","services","flatMap","service","writeUuid","serviceUuid","uuid","characteristicUuid","frame","mainCommandUuid"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/polling-command-sequencer.ts"],"mappings":";;AAGA,SAASA,UAAU,QAAQ,6BAA0B;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,uBAAuB,CAA6B;EACjDC,WAAWA,CAAkBC,QAAkC,EAAE;IAAA,KAApCA,QAAkC,GAAlCA,QAAkC;EAAG;EAElEC,eAAe,GAAGA,CAAA,KAAgC,IAAI,CAACD,QAAQ;EAE/DE,WAAW,GAAGA,CAAA,KAAgC,IAAI,CAACF,QAAQ;AACpE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMG,mBAAmB,GACvBC,QAAuC,IAEvC,IAAIN,uBAAuB,CACzBM,QAAQ,CAACC,OAAO,CAAEC,OAAO,IACvBA,OAAO,CAACC,SAAS,GACb,CACE;EACEC,WAAW,EAAEF,OAAO,CAACG,IAAI;EACzBC,kBAAkB,EAAEJ,OAAO,CAACC,SAAS,CAACE,IAAI;EAC1CE,KAAK,EAAEd,UAAU,CAACS,OAAO,CAACC,SAAS,CAACK,eAAe;AACrD,CAAC,CACF,GACD,EACN,CACF,CAAC;AAEH,SAASd,uBAAuB,EAAEK,mBAAmB","ignoreList":[]}
|