@ovok/native 1.6.46 → 1.6.48
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/baby-sleep-clip-catalog-asset.js +10 -0
- package/lib/commonjs/modules/bt-device/constants/baby-sleep-clip-catalog-asset.js.map +1 -0
- package/lib/commonjs/modules/bt-device/constants/device-instruction-pdfs.js +14 -1
- package/lib/commonjs/modules/bt-device/constants/device-instruction-pdfs.js.map +1 -1
- package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-assets.js +5 -1
- package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-assets.js.map +1 -1
- package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-entries.js +19 -0
- package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-entries.js.map +1 -1
- package/lib/commonjs/modules/bt-device/constants/supported-devices.js +50 -0
- package/lib/commonjs/modules/bt-device/constants/supported-devices.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/services/background-sync/background-service-uuids.js +2 -0
- package/lib/commonjs/modules/bt-management/services/background-sync/background-service-uuids.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/device-classes.js +95 -0
- package/lib/commonjs/modules/bt-management/services/device-classes.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/device-creator.js +5 -78
- package/lib/commonjs/modules/bt-management/services/device-creator.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js +6 -1
- package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/viatom/baby-sleep-clip.device.js +57 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/baby-sleep-clip.device.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/baby-sleep-clip.protocol.js +106 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/baby-sleep-clip.protocol.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/baby-sleep-clip.sequencer.js +80 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/baby-sleep-clip.sequencer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/lpm311.device.js +55 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/lpm311.device.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/lpm311.protocol.js +103 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/lpm311.protocol.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/lpm311.sequencer.js +33 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/lpm311.sequencer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/oxy-s3.device.js +72 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/oxy-s3.device.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/oxy-s3.protocol.js +103 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/oxy-s3.protocol.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/oxy-s3.sequencer.js +110 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/oxy-s3.sequencer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/pf10aw1.device.js +53 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/pf10aw1.device.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/pf10aw1.protocol.js +64 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/pf10aw1.protocol.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/pf10aw1.sequencer.js +96 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/pf10aw1.sequencer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/sp20.device.js +54 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/sp20.device.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/sp20.protocol.js +102 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/sp20.protocol.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/sp20.sequencer.js +115 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/sp20.sequencer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom-lepu-crypto.js +81 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom-lepu-crypto.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom-r20.device.js +57 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom-r20.device.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom-r20.protocol.js +118 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom-r20.protocol.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom-r20.sequencer.js +95 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom-r20.sequencer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.pm10.device.js +48 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.pm10.device.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.pm10.protocol.js +104 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.pm10.protocol.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.pm10.sequencer.js +57 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.pm10.sequencer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.wbp02.device.js +50 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.wbp02.device.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.wbp02.protocol.js +108 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.wbp02.protocol.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.wbp02.sequencer.js +64 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.wbp02.sequencer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/types/clock-sync.js +3 -0
- package/lib/commonjs/modules/bt-management/types/clock-sync.js.map +1 -1
- package/lib/commonjs/modules/bt-management/types/device-measurement-map.js.map +1 -1
- package/lib/commonjs/modules/bt-management/types/integrated-devices.js +13 -0
- package/lib/commonjs/modules/bt-management/types/integrated-devices.js.map +1 -1
- package/lib/module/modules/bt-device/constants/baby-sleep-clip-catalog-asset.js +7 -0
- package/lib/module/modules/bt-device/constants/baby-sleep-clip-catalog-asset.js.map +1 -0
- package/lib/module/modules/bt-device/constants/device-instruction-pdfs.js +14 -1
- package/lib/module/modules/bt-device/constants/device-instruction-pdfs.js.map +1 -1
- package/lib/module/modules/bt-device/constants/supported-device-catalog-assets.js +5 -1
- package/lib/module/modules/bt-device/constants/supported-device-catalog-assets.js.map +1 -1
- package/lib/module/modules/bt-device/constants/supported-device-catalog-entries.js +20 -1
- package/lib/module/modules/bt-device/constants/supported-device-catalog-entries.js.map +1 -1
- package/lib/module/modules/bt-device/constants/supported-devices.js +50 -0
- package/lib/module/modules/bt-device/constants/supported-devices.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/services/background-sync/background-service-uuids.js +2 -0
- package/lib/module/modules/bt-management/services/background-sync/background-service-uuids.js.map +1 -1
- package/lib/module/modules/bt-management/services/device-classes.js +92 -0
- package/lib/module/modules/bt-management/services/device-classes.js.map +1 -0
- package/lib/module/modules/bt-management/services/device-creator.js +3 -77
- package/lib/module/modules/bt-management/services/device-creator.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/bt-managed-device.js +6 -1
- package/lib/module/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/viatom/baby-sleep-clip.device.js +52 -0
- package/lib/module/modules/bt-management/services/devices/viatom/baby-sleep-clip.device.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/baby-sleep-clip.protocol.js +99 -0
- package/lib/module/modules/bt-management/services/devices/viatom/baby-sleep-clip.protocol.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/baby-sleep-clip.sequencer.js +75 -0
- package/lib/module/modules/bt-management/services/devices/viatom/baby-sleep-clip.sequencer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/lpm311.device.js +50 -0
- package/lib/module/modules/bt-management/services/devices/viatom/lpm311.device.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/lpm311.protocol.js +98 -0
- package/lib/module/modules/bt-management/services/devices/viatom/lpm311.protocol.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/lpm311.sequencer.js +28 -0
- package/lib/module/modules/bt-management/services/devices/viatom/lpm311.sequencer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/oxy-s3.device.js +67 -0
- package/lib/module/modules/bt-management/services/devices/viatom/oxy-s3.device.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/oxy-s3.protocol.js +94 -0
- package/lib/module/modules/bt-management/services/devices/viatom/oxy-s3.protocol.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/oxy-s3.sequencer.js +105 -0
- package/lib/module/modules/bt-management/services/devices/viatom/oxy-s3.sequencer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/pf10aw1.device.js +48 -0
- package/lib/module/modules/bt-management/services/devices/viatom/pf10aw1.device.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/pf10aw1.protocol.js +57 -0
- package/lib/module/modules/bt-management/services/devices/viatom/pf10aw1.protocol.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/pf10aw1.sequencer.js +91 -0
- package/lib/module/modules/bt-management/services/devices/viatom/pf10aw1.sequencer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/sp20.device.js +49 -0
- package/lib/module/modules/bt-management/services/devices/viatom/sp20.device.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/sp20.protocol.js +94 -0
- package/lib/module/modules/bt-management/services/devices/viatom/sp20.protocol.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/sp20.sequencer.js +110 -0
- package/lib/module/modules/bt-management/services/devices/viatom/sp20.sequencer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom-lepu-crypto.js +71 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom-lepu-crypto.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom-r20.device.js +52 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom-r20.device.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom-r20.protocol.js +110 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom-r20.protocol.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom-r20.sequencer.js +90 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom-r20.sequencer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.pm10.device.js +43 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.pm10.device.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.pm10.protocol.js +92 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.pm10.protocol.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.pm10.sequencer.js +52 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.pm10.sequencer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.wbp02.device.js +45 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.wbp02.device.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.wbp02.protocol.js +94 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.wbp02.protocol.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.wbp02.sequencer.js +59 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.wbp02.sequencer.js.map +1 -0
- package/lib/module/modules/bt-management/types/clock-sync.js +3 -0
- package/lib/module/modules/bt-management/types/clock-sync.js.map +1 -1
- package/lib/module/modules/bt-management/types/device-measurement-map.js.map +1 -1
- package/lib/module/modules/bt-management/types/integrated-devices.js +13 -0
- package/lib/module/modules/bt-management/types/integrated-devices.js.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-device/constants/baby-sleep-clip-catalog-asset.d.ts +4 -0
- package/lib/typescript/commonjs/src/modules/bt-device/constants/baby-sleep-clip-catalog-asset.d.ts.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-device/constants/supported-device-catalog-assets.d.ts +5 -1
- package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-assets.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-entries.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-devices.d.ts +1 -1
- package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-devices.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/services/background-sync/background-service-uuids.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/device-classes.d.ts +89 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/device-classes.d.ts.map +1 -0
- 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/bt-managed-device.d.ts +2 -0
- 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/viatom/baby-sleep-clip.device.d.ts +18 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/baby-sleep-clip.device.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/baby-sleep-clip.protocol.d.ts +27 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/baby-sleep-clip.protocol.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/baby-sleep-clip.sequencer.d.ts +32 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/baby-sleep-clip.sequencer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/lpm311.device.d.ts +9 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/lpm311.device.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/lpm311.protocol.d.ts +14 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/lpm311.protocol.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/lpm311.sequencer.d.ts +10 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/lpm311.sequencer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/oxy-s3.device.d.ts +18 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/oxy-s3.device.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/oxy-s3.protocol.d.ts +42 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/oxy-s3.protocol.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/oxy-s3.sequencer.d.ts +31 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/oxy-s3.sequencer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/pf10aw1.device.d.ts +19 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/pf10aw1.device.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/pf10aw1.protocol.d.ts +30 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/pf10aw1.protocol.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/pf10aw1.sequencer.d.ts +27 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/pf10aw1.sequencer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/sp20.device.d.ts +20 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/sp20.device.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/sp20.protocol.d.ts +28 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/sp20.protocol.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/sp20.sequencer.d.ts +26 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/sp20.sequencer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom-lepu-crypto.d.ts +7 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom-lepu-crypto.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom-r20.device.d.ts +20 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom-r20.device.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom-r20.protocol.d.ts +38 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom-r20.protocol.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom-r20.sequencer.d.ts +35 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom-r20.sequencer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.pm10.device.d.ts +15 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.pm10.device.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.pm10.protocol.d.ts +25 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.pm10.protocol.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.pm10.sequencer.d.ts +21 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.pm10.sequencer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.wbp02.device.d.ts +14 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.wbp02.device.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.wbp02.protocol.d.ts +31 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.wbp02.protocol.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.wbp02.sequencer.d.ts +20 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.wbp02.sequencer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/clock-sync.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts +14 -1
- 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 +14 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/integrated-devices.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-device/constants/baby-sleep-clip-catalog-asset.d.ts +4 -0
- package/lib/typescript/module/src/modules/bt-device/constants/baby-sleep-clip-catalog-asset.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-device/constants/supported-device-catalog-assets.d.ts +5 -1
- package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-assets.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-entries.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-device/constants/supported-devices.d.ts +1 -1
- package/lib/typescript/module/src/modules/bt-device/constants/supported-devices.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/services/background-sync/background-service-uuids.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/device-classes.d.ts +89 -0
- package/lib/typescript/module/src/modules/bt-management/services/device-classes.d.ts.map +1 -0
- 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/bt-managed-device.d.ts +2 -0
- 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/viatom/baby-sleep-clip.device.d.ts +18 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/baby-sleep-clip.device.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/baby-sleep-clip.protocol.d.ts +27 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/baby-sleep-clip.protocol.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/baby-sleep-clip.sequencer.d.ts +32 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/baby-sleep-clip.sequencer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/lpm311.device.d.ts +9 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/lpm311.device.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/lpm311.protocol.d.ts +14 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/lpm311.protocol.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/lpm311.sequencer.d.ts +10 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/lpm311.sequencer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/oxy-s3.device.d.ts +18 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/oxy-s3.device.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/oxy-s3.protocol.d.ts +42 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/oxy-s3.protocol.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/oxy-s3.sequencer.d.ts +31 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/oxy-s3.sequencer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/pf10aw1.device.d.ts +19 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/pf10aw1.device.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/pf10aw1.protocol.d.ts +30 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/pf10aw1.protocol.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/pf10aw1.sequencer.d.ts +27 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/pf10aw1.sequencer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/sp20.device.d.ts +20 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/sp20.device.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/sp20.protocol.d.ts +28 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/sp20.protocol.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/sp20.sequencer.d.ts +26 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/sp20.sequencer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom-lepu-crypto.d.ts +7 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom-lepu-crypto.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom-r20.device.d.ts +20 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom-r20.device.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom-r20.protocol.d.ts +38 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom-r20.protocol.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom-r20.sequencer.d.ts +35 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom-r20.sequencer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.pm10.device.d.ts +15 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.pm10.device.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.pm10.protocol.d.ts +25 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.pm10.protocol.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.pm10.sequencer.d.ts +21 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.pm10.sequencer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.wbp02.device.d.ts +14 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.wbp02.device.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.wbp02.protocol.d.ts +31 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.wbp02.protocol.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.wbp02.sequencer.d.ts +20 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.wbp02.sequencer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/types/clock-sync.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts +14 -1
- 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 +14 -1
- package/lib/typescript/module/src/modules/bt-management/types/integrated-devices.d.ts.map +1 -1
- package/package.json +6 -4
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.parseViatomR20Advertisement = exports.decodeViatomR20Response = exports.decodeViatomR20Parameters = exports.ViatomR20FrameReader = exports.ViatomR20Command = exports.VIATOM_R20_WRITE = exports.VIATOM_R20_SERVICE = exports.VIATOM_R20_NOTIFY = exports.VIATOM_R20_MEASUREMENT_TYPE = void 0;
|
|
7
|
+
var _core = require("@ovok/core");
|
|
8
|
+
var _calculateCrc = require("../../../utils/calculate-crc-8.js");
|
|
9
|
+
var _hexToByte = require("../../../utils/hex-to-byte.js");
|
|
10
|
+
var _le16FromHex = require("../../../utils/le-16-from-hex.js");
|
|
11
|
+
var _lepuAdvertisement = require("../lepu/lepu.advertisement.js");
|
|
12
|
+
var _lepuFrameReader = require("../lepu/lepu.frame-reader.js");
|
|
13
|
+
/* eslint-disable import/group-exports */
|
|
14
|
+
|
|
15
|
+
const VIATOM_R20_SERVICE = exports.VIATOM_R20_SERVICE = "14839ac4-7d7e-415c-9a42-167340cf2339";
|
|
16
|
+
const VIATOM_R20_WRITE = exports.VIATOM_R20_WRITE = "8b00ace7-eb0b-49b0-bbe9-9aee0a26e1a3";
|
|
17
|
+
const VIATOM_R20_NOTIFY = exports.VIATOM_R20_NOTIFY = "0734594a-a8e7-4b1a-a6b1-cd5243059a57";
|
|
18
|
+
const VIATOM_R20_MEASUREMENT_TYPE = exports.VIATOM_R20_MEASUREMENT_TYPE = _core.MeasurementTypeKey.respiratoryTherapy;
|
|
19
|
+
const ViatomR20Command = exports.ViatomR20Command = {
|
|
20
|
+
authenticate: 0xff,
|
|
21
|
+
syncTime: 0xc0,
|
|
22
|
+
readParameters: 54
|
|
23
|
+
};
|
|
24
|
+
const unitComponent = (name, value, unit, code) => ({
|
|
25
|
+
code: {
|
|
26
|
+
text: name
|
|
27
|
+
},
|
|
28
|
+
valueQuantity: {
|
|
29
|
+
value,
|
|
30
|
+
unit,
|
|
31
|
+
system: "http://unitsofmeasure.org",
|
|
32
|
+
code
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
const u16 = (bytes, offset) => (bytes[offset] ?? 0) | (bytes[offset + 1] ?? 0) << 8;
|
|
36
|
+
const bounded = (value, min, max) => value >= min && value <= max ? value : undefined;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* ViHealth's `BleBroadcast` uses byte 3 for protocol v1 and byte 4 for v2. The selected
|
|
40
|
+
* byte's high nibble is the encryption level; levels 1 and 2 require the Lepu handshake.
|
|
41
|
+
*/
|
|
42
|
+
const parseViatomR20Advertisement = manufacturerData => {
|
|
43
|
+
const bytes = (0, _lepuAdvertisement.manufacturerBytes)(manufacturerData ?? undefined);
|
|
44
|
+
const uuid2 = bytes[4] ?? 0;
|
|
45
|
+
const selected = (uuid2 & 0x0f) === 2 ? uuid2 : bytes[3] ?? 0;
|
|
46
|
+
const level = (selected & 0xf0) >> 4;
|
|
47
|
+
return {
|
|
48
|
+
encrypted: level === 1 || level === 2
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/** Validates the A5 request/reply frame shared by the ViHealth ventilator models. */
|
|
53
|
+
exports.parseViatomR20Advertisement = parseViatomR20Advertisement;
|
|
54
|
+
const decodeViatomR20Response = frame => {
|
|
55
|
+
if (frame.length < 8 || (0, _hexToByte.hexToByte)(frame[0] ?? "00") !== 0xa5) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
const command = (0, _hexToByte.hexToByte)(frame[1] ?? "00");
|
|
59
|
+
const checksumIndex = frame.length - 1;
|
|
60
|
+
const payloadLength = (0, _le16FromHex.le16FromHex)(frame, 5);
|
|
61
|
+
if ((0, _hexToByte.hexToByte)(frame[2] ?? "00") !== (~command & 0xff) || frame.length !== payloadLength + 8 || (0, _hexToByte.hexToByte)(frame[checksumIndex] ?? "00") !== (0, _calculateCrc.calculateCrc8)([...frame], checksumIndex)) {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
command,
|
|
66
|
+
status: (0, _hexToByte.hexToByte)(frame[3] ?? "00"),
|
|
67
|
+
payload: frame.slice(7, checksumIndex).map(_hexToByte.hexToByte)
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Converts the 24-byte RT_PARAM response documented in VentilatorBleResponse.RtParam.
|
|
73
|
+
* The device response has no measurement timestamp, so callers supply the receive time.
|
|
74
|
+
*/
|
|
75
|
+
exports.decodeViatomR20Response = decodeViatomR20Response;
|
|
76
|
+
const decodeViatomR20Parameters = (bytes, recordedAt = new Date()) => {
|
|
77
|
+
if (bytes.length < 24) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
const components = [];
|
|
81
|
+
const add = (name, value, min, max, unit, code, includeZero = false) => {
|
|
82
|
+
const valid = bounded(value, min, max);
|
|
83
|
+
if (valid !== undefined && (valid > 0 || includeZero)) {
|
|
84
|
+
components.push(unitComponent(name, valid, unit, code));
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
add("Airway pressure", u16(bytes, 0) / 10, 0, 60, "cmH2O", "cm[H2O]");
|
|
88
|
+
add("Inspiratory pressure", u16(bytes, 2) / 10, 0, 60, "cmH2O", "cm[H2O]");
|
|
89
|
+
add("Expiratory pressure", u16(bytes, 4) / 10, 0, 60, "cmH2O", "cm[H2O]");
|
|
90
|
+
add("Tidal volume", u16(bytes, 6), 0, 5000, "mL", "mL");
|
|
91
|
+
add("Minute ventilation", u16(bytes, 8) / 10, 0, 100, "L/min", "L/min");
|
|
92
|
+
add("Leak", u16(bytes, 10) / 10, 0, 200, "L/min", "L/min", true);
|
|
93
|
+
add("Respiratory rate", u16(bytes, 12), 0, 100, "breaths/min", "{breaths}/min");
|
|
94
|
+
add("Inspiratory time", u16(bytes, 14) / 10, 0, 10, "s", "s");
|
|
95
|
+
add("Inspiratory/expiratory ratio", u16(bytes, 16) / 10_000, 0, 10, "ratio", "1");
|
|
96
|
+
add("Blood oxygen saturation", u16(bytes, 18), 1, 100, "%", "%");
|
|
97
|
+
add("Pulse rate", u16(bytes, 20), 1, 300, "beats/min", "/min");
|
|
98
|
+
add("Heart rate", u16(bytes, 22), 1, 300, "beats/min", "/min");
|
|
99
|
+
if (components.length === 0 || components.every(({
|
|
100
|
+
valueQuantity
|
|
101
|
+
}) => (valueQuantity?.value ?? 0) === 0)) {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
measurementTypeKey: VIATOM_R20_MEASUREMENT_TYPE,
|
|
106
|
+
components,
|
|
107
|
+
recordedAt
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/** Reads complete A5 notifications and safely joins split or concatenated frames. */
|
|
112
|
+
exports.decodeViatomR20Parameters = decodeViatomR20Parameters;
|
|
113
|
+
class ViatomR20FrameReader {
|
|
114
|
+
reader = new _lepuFrameReader.LepuFrameReader(["a5"]);
|
|
115
|
+
readFrame = buffer => this.reader.readFrame(buffer);
|
|
116
|
+
}
|
|
117
|
+
exports.ViatomR20FrameReader = ViatomR20FrameReader;
|
|
118
|
+
//# sourceMappingURL=viatom-r20.protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_core","require","_calculateCrc","_hexToByte","_le16FromHex","_lepuAdvertisement","_lepuFrameReader","VIATOM_R20_SERVICE","exports","VIATOM_R20_WRITE","VIATOM_R20_NOTIFY","VIATOM_R20_MEASUREMENT_TYPE","MeasurementTypeKey","respiratoryTherapy","ViatomR20Command","authenticate","syncTime","readParameters","unitComponent","name","value","unit","code","text","valueQuantity","system","u16","bytes","offset","bounded","min","max","undefined","parseViatomR20Advertisement","manufacturerData","manufacturerBytes","uuid2","selected","level","encrypted","decodeViatomR20Response","frame","length","hexToByte","command","checksumIndex","payloadLength","le16FromHex","calculateCrc8","status","payload","slice","map","decodeViatomR20Parameters","recordedAt","Date","components","add","includeZero","valid","push","every","measurementTypeKey","ViatomR20FrameReader","reader","LepuFrameReader","readFrame","buffer"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom-r20.protocol.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ViatomR20Sequencer = void 0;
|
|
7
|
+
var _core = require("@ovok/core");
|
|
8
|
+
var _caseType = require("../../../types/case-type.js");
|
|
9
|
+
var _clockSync = require("../../../types/clock-sync.js");
|
|
10
|
+
var _lepuCommandBuilder = require("../lepu/lepu.command-builder.js");
|
|
11
|
+
var _viatomLepuCrypto = require("./viatom-lepu-crypto.js");
|
|
12
|
+
var _viatomR20Protocol = require("./viatom-r20.protocol.js");
|
|
13
|
+
const timezoneOffsetTenths = (date, timezone) => timezone === "utc" ? 0 : Math.round(-date.getTimezoneOffset() / 6);
|
|
14
|
+
|
|
15
|
+
/** Runs the ViHealth ventilator handshake, optional clock write, and RT_PARAM request. */
|
|
16
|
+
class ViatomR20Sequencer {
|
|
17
|
+
commands = new _lepuCommandBuilder.LepuCommandBuilder("a5");
|
|
18
|
+
resultReported = false;
|
|
19
|
+
constructor(params) {
|
|
20
|
+
this.params = params;
|
|
21
|
+
this.phase = params.encrypted ? "authenticate" : this.nextPhaseAfterAuth();
|
|
22
|
+
}
|
|
23
|
+
initialCommands = () => {
|
|
24
|
+
if (this.phase === "authenticate") {
|
|
25
|
+
return [this.command(_viatomR20Protocol.ViatomR20Command.authenticate, (0, _viatomLepuCrypto.createLepuAccessToken)(this.now()))];
|
|
26
|
+
}
|
|
27
|
+
return [this.commandForCurrentPhase()];
|
|
28
|
+
};
|
|
29
|
+
isNormalDisconnect = () => this.resultReported;
|
|
30
|
+
commandTimeoutMs = () => this.phase === "done" ? undefined : 5_000;
|
|
31
|
+
onCommandTimeout = () => {
|
|
32
|
+
this.phase = "done";
|
|
33
|
+
return {
|
|
34
|
+
terminal: true
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
nextCommand = frame => {
|
|
38
|
+
const response = (0, _viatomR20Protocol.decodeViatomR20Response)(frame);
|
|
39
|
+
if (!response || response.status !== 1) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
if (this.phase === "authenticate") {
|
|
43
|
+
if (response.command !== _viatomR20Protocol.ViatomR20Command.authenticate) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
const sessionKey = (0, _viatomLepuCrypto.parseLepuSessionKey)((0, _viatomLepuCrypto.decryptLepuHandshake)(response.payload));
|
|
47
|
+
if (!sessionKey) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
this.sessionKey = sessionKey;
|
|
51
|
+
this.phase = this.nextPhaseAfterAuth();
|
|
52
|
+
return [this.commandForCurrentPhase()];
|
|
53
|
+
}
|
|
54
|
+
if (this.phase === "clock") {
|
|
55
|
+
if (response.command !== _viatomR20Protocol.ViatomR20Command.syncTime) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
this.phase = "parameters";
|
|
59
|
+
return [this.command(_viatomR20Protocol.ViatomR20Command.readParameters)];
|
|
60
|
+
}
|
|
61
|
+
if (this.phase === "parameters" && response.command === _viatomR20Protocol.ViatomR20Command.readParameters) {
|
|
62
|
+
const payload = this.sessionKey ? (0, _viatomLepuCrypto.decryptLepuPayload)(response.payload, this.sessionKey) ?? [] : response.payload;
|
|
63
|
+
const measurement = (0, _viatomR20Protocol.decodeViatomR20Parameters)(payload, this.now());
|
|
64
|
+
this.phase = "done";
|
|
65
|
+
if (measurement) {
|
|
66
|
+
this.resultReported = true;
|
|
67
|
+
this.params.onResult({
|
|
68
|
+
...measurement,
|
|
69
|
+
caseType: _caseType.CaseType.RESULT,
|
|
70
|
+
measurementTypeKey: _core.MeasurementTypeKey.respiratoryTherapy
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return undefined;
|
|
75
|
+
};
|
|
76
|
+
nextPhaseAfterAuth = () => (0, _clockSync.isClockSyncEnabled)(this.params.clockSync) ? "clock" : "parameters";
|
|
77
|
+
commandForCurrentPhase = () => this.phase === "clock" ? this.timeCommand() : this.command(_viatomR20Protocol.ViatomR20Command.readParameters);
|
|
78
|
+
command = (command, payload = []) => {
|
|
79
|
+
const encryptedPayload = this.sessionKey ? (0, _viatomLepuCrypto.encryptLepuPayload)(payload, this.sessionKey) : [...payload];
|
|
80
|
+
return {
|
|
81
|
+
...this.params.write,
|
|
82
|
+
frame: this.commands.build(command, encryptedPayload),
|
|
83
|
+
withoutResponse: true
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
timeCommand = () => {
|
|
87
|
+
const date = this.now();
|
|
88
|
+
const parts = (0, _clockSync.getClockParts)(date, this.params.clockSync?.timezone);
|
|
89
|
+
const timezone = this.params.clockSync?.timezone ?? "local";
|
|
90
|
+
return this.command(_viatomR20Protocol.ViatomR20Command.syncTime, [parts.year & 0xff, parts.year >>> 8, parts.month, parts.day, parts.hours, parts.minutes, parts.seconds, timezoneOffsetTenths(date, timezone) & 0xff]);
|
|
91
|
+
};
|
|
92
|
+
now = () => this.params.clockSync?.now?.() ?? this.params.now?.() ?? new Date();
|
|
93
|
+
}
|
|
94
|
+
exports.ViatomR20Sequencer = ViatomR20Sequencer;
|
|
95
|
+
//# sourceMappingURL=viatom-r20.sequencer.js.map
|
package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom-r20.sequencer.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_core","require","_caseType","_clockSync","_lepuCommandBuilder","_viatomLepuCrypto","_viatomR20Protocol","timezoneOffsetTenths","date","timezone","Math","round","getTimezoneOffset","ViatomR20Sequencer","commands","LepuCommandBuilder","resultReported","constructor","params","phase","encrypted","nextPhaseAfterAuth","initialCommands","command","ViatomR20Command","authenticate","createLepuAccessToken","now","commandForCurrentPhase","isNormalDisconnect","commandTimeoutMs","undefined","onCommandTimeout","terminal","nextCommand","frame","response","decodeViatomR20Response","status","sessionKey","parseLepuSessionKey","decryptLepuHandshake","payload","syncTime","readParameters","decryptLepuPayload","measurement","decodeViatomR20Parameters","onResult","caseType","CaseType","RESULT","measurementTypeKey","MeasurementTypeKey","respiratoryTherapy","isClockSyncEnabled","clockSync","timeCommand","encryptedPayload","encryptLepuPayload","write","build","withoutResponse","parts","getClockParts","year","month","day","hours","minutes","seconds","Date","exports"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom-r20.sequencer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.pm10MainServices = exports.Pm10Device = void 0;
|
|
7
|
+
var _btManagedDevice = require("../bt-managed-device.js");
|
|
8
|
+
var _viatomPm10Protocol = require("./viatom.pm10.protocol.js");
|
|
9
|
+
var _viatomPm10Sequencer = require("./viatom.pm10.sequencer.js");
|
|
10
|
+
/* eslint-disable import/group-exports, import/order, padding-line-between-statements */
|
|
11
|
+
|
|
12
|
+
const acceptEverything = {
|
|
13
|
+
caseValuePosition: [],
|
|
14
|
+
cases: []
|
|
15
|
+
};
|
|
16
|
+
const pm10MainServices = exports.pm10MainServices = [{
|
|
17
|
+
uuid: _viatomPm10Protocol.PM10_SERVICE,
|
|
18
|
+
monitorUuids: [{
|
|
19
|
+
uuid: _viatomPm10Protocol.PM10_NOTIFY,
|
|
20
|
+
parsingModel: acceptEverything
|
|
21
|
+
}],
|
|
22
|
+
writeUuid: {
|
|
23
|
+
uuid: _viatomPm10Protocol.PM10_WRITE,
|
|
24
|
+
mainCommandUuid: "90"
|
|
25
|
+
}
|
|
26
|
+
}];
|
|
27
|
+
class Pm10Device extends _btManagedDevice.BTManagedDevice {
|
|
28
|
+
mainServices = pm10MainServices;
|
|
29
|
+
stuckDataTimeout = 120_000;
|
|
30
|
+
onStreamStart = undefined;
|
|
31
|
+
preferredMtu = 247;
|
|
32
|
+
constructor(device, params) {
|
|
33
|
+
super(device, params);
|
|
34
|
+
this.frameReader = new _viatomPm10Protocol.Pm10FrameReader();
|
|
35
|
+
this.createCommandSequencer = () => new _viatomPm10Sequencer.Pm10Sequencer({
|
|
36
|
+
write: {
|
|
37
|
+
serviceUuid: _viatomPm10Protocol.PM10_SERVICE,
|
|
38
|
+
characteristicUuid: _viatomPm10Protocol.PM10_WRITE
|
|
39
|
+
},
|
|
40
|
+
onResult: result => this.onResult?.(result)
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
handleSuccessResult() {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.Pm10Device = Pm10Device;
|
|
48
|
+
//# sourceMappingURL=viatom.pm10.device.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_btManagedDevice","require","_viatomPm10Protocol","_viatomPm10Sequencer","acceptEverything","caseValuePosition","cases","pm10MainServices","exports","uuid","PM10_SERVICE","monitorUuids","PM10_NOTIFY","parsingModel","writeUuid","PM10_WRITE","mainCommandUuid","Pm10Device","BTManagedDevice","mainServices","stuckDataTimeout","onStreamStart","undefined","preferredMtu","constructor","device","params","frameReader","Pm10FrameReader","createCommandSequencer","Pm10Sequencer","write","serviceUuid","characteristicUuid","onResult","result","handleSuccessResult"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.pm10.device.ts"],"mappings":";;;;;;AAQA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,oBAAA,GAAAF,OAAA;AAVA;;AAYA,MAAMG,gBAAgB,GAAG;EAAEC,iBAAiB,EAAE,EAAE;EAAEC,KAAK,EAAE;AAAG,CAAC;AACtD,MAAMC,gBAA4B,GAAAC,OAAA,CAAAD,gBAAA,GAAG,CAAC;EAAEE,IAAI,EAAEC,gCAAY;EAAEC,YAAY,EAAE,CAAC;IAAEF,IAAI,EAAEG,+BAAW;IAAEC,YAAY,EAAET;EAAiB,CAAC,CAAC;EAAEU,SAAS,EAAE;IAAEL,IAAI,EAAEM,8BAAU;IAAEC,eAAe,EAAE;EAAK;AAAE,CAAC,CAAC;AAC5L,MAAMC,UAAU,SAASC,gCAAe,CAAyB;EAC5DC,YAAY,GAAGZ,gBAAgB;EAC/Ba,gBAAgB,GAAG,OAAO;EAC1BC,aAAa,GAAGC,SAAS;EAChBC,YAAY,GAAG,GAAG;EAC9BC,WAAWA,CAACC,MAAc,EAAEC,MAAkD,EAAE;IACrF,KAAK,CAACD,MAAM,EAAEC,MAAM,CAAC;IACrB,IAAI,CAACC,WAAW,GAAG,IAAIC,mCAAe,CAAC,CAAC;IACxC,IAAI,CAACC,sBAAsB,GAAG,MAAM,IAAIC,kCAAa,CAAC;MAAEC,KAAK,EAAE;QAAEC,WAAW,EAAEtB,gCAAY;QAAEuB,kBAAkB,EAAElB;MAAW,CAAC;MAAEmB,QAAQ,EAAGC,MAAM,IAAK,IAAI,CAACD,QAAQ,GAAGC,MAAuF;IAAE,CAAC,CAAC;EACjQ;EACUC,mBAAmBA,CAAA,EAAS;IAAE;EAAQ;AAClD;AAAC5B,OAAA,CAAAS,UAAA,GAAAA,UAAA","ignoreList":[]}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.pm10GetTotal = exports.pm10GetCaseInfo = exports.pm10GetCaseData = exports.pm10Command = exports.decodePm10WavePage = exports.decodePm10Frame = exports.decodePm10CaseInfo = exports.Pm10FrameReader = exports.PM10_WRITE = exports.PM10_SERVICE = exports.PM10_NOTIFY = void 0;
|
|
7
|
+
var _frameReadStatus = require("../../../types/frame-read-status.js");
|
|
8
|
+
var _hexToByte = require("../../../utils/hex-to-byte.js");
|
|
9
|
+
/* eslint-disable import/group-exports, import/order, padding-line-between-statements, curly, max-lines */
|
|
10
|
+
|
|
11
|
+
const PM10_SERVICE = exports.PM10_SERVICE = "0000ff12-0000-1000-8000-00805f9b34fb";
|
|
12
|
+
const PM10_WRITE = exports.PM10_WRITE = "0000ff01-0000-1000-8000-00805f9b34fb";
|
|
13
|
+
const PM10_NOTIFY = exports.PM10_NOTIFY = "0000ff02-0000-1000-8000-00805f9b34fb";
|
|
14
|
+
const byte = value => (value & 0xff).toString(16).padStart(2, "0");
|
|
15
|
+
const checksum = frame => byte(frame.reduce((sum, value) => sum + (0, _hexToByte.hexToByte)(value), 0) & 0x7f);
|
|
16
|
+
const pm10Command = (head, payload = []) => {
|
|
17
|
+
const body = [byte(head), ...payload.map(byte)];
|
|
18
|
+
return [...body, checksum(body)];
|
|
19
|
+
};
|
|
20
|
+
exports.pm10Command = pm10Command;
|
|
21
|
+
const pm10GetTotal = () => pm10Command(0x90, [0x03]);
|
|
22
|
+
exports.pm10GetTotal = pm10GetTotal;
|
|
23
|
+
const pm10GetCaseInfo = type => pm10Command(0x95, [type]);
|
|
24
|
+
exports.pm10GetCaseInfo = pm10GetCaseInfo;
|
|
25
|
+
const pm10GetCaseData = type => pm10Command(0x96, [type]);
|
|
26
|
+
exports.pm10GetCaseData = pm10GetCaseData;
|
|
27
|
+
const decodePm10CaseInfo = content => {
|
|
28
|
+
if (content.length < 16) return undefined;
|
|
29
|
+
const value = index => (0, _hexToByte.hexToByte)(content[index] ?? "00");
|
|
30
|
+
const recordedAt = new Date(2000 + value(0), value(1) - 1, value(2), value(3), value(4), value(5));
|
|
31
|
+
const heartRate = (value(7) & 0x7f) << 7 | value(6) & 0x7f;
|
|
32
|
+
const waveformLength = (value(15) & 0x7f) << 7 | value(14) & 0x7f;
|
|
33
|
+
return {
|
|
34
|
+
recordedAt,
|
|
35
|
+
heartRate,
|
|
36
|
+
waveformLength,
|
|
37
|
+
results: content.slice(8, 14).map((_entry, index) => value(index + 8))
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
exports.decodePm10CaseInfo = decodePm10CaseInfo;
|
|
41
|
+
const mergeSevenBit = (mask, values) => values.slice(0, 7).map((value, index) => {
|
|
42
|
+
const raw = (0, _hexToByte.hexToByte)(value) & 0x7f;
|
|
43
|
+
return (mask & 1 << index) !== 0 ? raw | 0x80 : raw;
|
|
44
|
+
});
|
|
45
|
+
const decodePm10WavePage = content => {
|
|
46
|
+
if (content.length < 15) return [];
|
|
47
|
+
const first = mergeSevenBit((0, _hexToByte.hexToByte)(content[0] ?? "00"), content.slice(3, 10));
|
|
48
|
+
const second = mergeSevenBit((0, _hexToByte.hexToByte)(content[1] ?? "00"), content.slice(10, 17));
|
|
49
|
+
return [...first, ...second].map((high, index) => {
|
|
50
|
+
const low = index < 7 ? (0, _hexToByte.hexToByte)(content[index + 3] ?? "00") : (0, _hexToByte.hexToByte)(content[index + 3] ?? "00");
|
|
51
|
+
return (high << 8 | low) - 16384;
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
exports.decodePm10WavePage = decodePm10WavePage;
|
|
55
|
+
const responseLength = {
|
|
56
|
+
0xe0: 7,
|
|
57
|
+
0xe5: 18,
|
|
58
|
+
0xe6: 17,
|
|
59
|
+
0xf2: 8,
|
|
60
|
+
0xf3: 3,
|
|
61
|
+
0xf4: 18,
|
|
62
|
+
0xf5: 3,
|
|
63
|
+
0xf8: 10
|
|
64
|
+
};
|
|
65
|
+
const decodePm10Frame = frame => {
|
|
66
|
+
const head = (0, _hexToByte.hexToByte)(frame[0] ?? "00");
|
|
67
|
+
const length = responseLength[head];
|
|
68
|
+
if (!length || frame.length < length || checksum(frame.slice(0, -1)) !== frame[length - 1]) return undefined;
|
|
69
|
+
return {
|
|
70
|
+
head,
|
|
71
|
+
content: frame.slice(1, length - 1)
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
exports.decodePm10Frame = decodePm10Frame;
|
|
75
|
+
class Pm10FrameReader {
|
|
76
|
+
readFrame(buffer) {
|
|
77
|
+
const start = buffer.findIndex(value => responseLength[(0, _hexToByte.hexToByte)(value)] !== undefined);
|
|
78
|
+
if (start < 0) return {
|
|
79
|
+
status: _frameReadStatus.FrameReadStatus.INCOMPLETE,
|
|
80
|
+
consumedBytes: Math.max(0, buffer.length - 1)
|
|
81
|
+
};
|
|
82
|
+
const length = responseLength[(0, _hexToByte.hexToByte)(buffer[start] ?? "00")];
|
|
83
|
+
if (length === undefined) return {
|
|
84
|
+
status: _frameReadStatus.FrameReadStatus.CORRUPT,
|
|
85
|
+
consumedBytes: start + 1
|
|
86
|
+
};
|
|
87
|
+
if (start + length > buffer.length) return {
|
|
88
|
+
status: _frameReadStatus.FrameReadStatus.INCOMPLETE,
|
|
89
|
+
consumedBytes: start
|
|
90
|
+
};
|
|
91
|
+
const frame = buffer.slice(start, start + length);
|
|
92
|
+
if (!decodePm10Frame(frame)) return {
|
|
93
|
+
status: _frameReadStatus.FrameReadStatus.CORRUPT,
|
|
94
|
+
consumedBytes: start + 1
|
|
95
|
+
};
|
|
96
|
+
return {
|
|
97
|
+
status: _frameReadStatus.FrameReadStatus.COMPLETE,
|
|
98
|
+
consumedBytes: start + length,
|
|
99
|
+
frame
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.Pm10FrameReader = Pm10FrameReader;
|
|
104
|
+
//# sourceMappingURL=viatom.pm10.protocol.js.map
|
package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.pm10.protocol.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_frameReadStatus","require","_hexToByte","PM10_SERVICE","exports","PM10_WRITE","PM10_NOTIFY","byte","value","toString","padStart","checksum","frame","reduce","sum","hexToByte","pm10Command","head","payload","body","map","pm10GetTotal","pm10GetCaseInfo","type","pm10GetCaseData","decodePm10CaseInfo","content","length","undefined","index","recordedAt","Date","heartRate","waveformLength","results","slice","_entry","mergeSevenBit","mask","values","raw","decodePm10WavePage","first","second","high","low","responseLength","decodePm10Frame","Pm10FrameReader","readFrame","buffer","start","findIndex","status","FrameReadStatus","INCOMPLETE","consumedBytes","Math","max","CORRUPT","COMPLETE"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.pm10.protocol.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Pm10Sequencer = void 0;
|
|
7
|
+
var _core = require("@ovok/core");
|
|
8
|
+
var _caseType = require("../../../types/case-type.js");
|
|
9
|
+
var _viatomPm10Protocol = require("./viatom.pm10.protocol.js");
|
|
10
|
+
/* eslint-disable import/order, padding-line-between-statements, curly */
|
|
11
|
+
|
|
12
|
+
const command = (params, frame) => ({
|
|
13
|
+
...params.write,
|
|
14
|
+
frame,
|
|
15
|
+
withoutResponse: true
|
|
16
|
+
});
|
|
17
|
+
class Pm10Sequencer {
|
|
18
|
+
phase = "total";
|
|
19
|
+
pages = [];
|
|
20
|
+
constructor(params) {
|
|
21
|
+
this.params = params;
|
|
22
|
+
}
|
|
23
|
+
initialCommands = () => [command(this.params, (0, _viatomPm10Protocol.pm10GetTotal)())];
|
|
24
|
+
isHistoryTransfer = () => true;
|
|
25
|
+
isNormalDisconnect = () => this.phase === "done";
|
|
26
|
+
nextCommand = frame => {
|
|
27
|
+
const response = (0, _viatomPm10Protocol.decodePm10Frame)(frame);
|
|
28
|
+
if (!response) return undefined;
|
|
29
|
+
if (response.head === 0xe0 && this.phase === "total") {
|
|
30
|
+
this.phase = "info";
|
|
31
|
+
return [command(this.params, (0, _viatomPm10Protocol.pm10GetCaseInfo)(3))];
|
|
32
|
+
}
|
|
33
|
+
if (response.head === 0xe5 && this.phase === "info") {
|
|
34
|
+
this.info = (0, _viatomPm10Protocol.decodePm10CaseInfo)(response.content);
|
|
35
|
+
this.pages = [];
|
|
36
|
+
this.phase = "data";
|
|
37
|
+
return [command(this.params, (0, _viatomPm10Protocol.pm10GetCaseData)(0))];
|
|
38
|
+
}
|
|
39
|
+
if (response.head === 0xe6 && this.phase === "data") {
|
|
40
|
+
this.pages.push(...(0, _viatomPm10Protocol.decodePm10WavePage)(response.content));
|
|
41
|
+
const last = (Number.parseInt(response.content[0] ?? "00", 16) & 0x40) !== 0;
|
|
42
|
+
if (!last) return [command(this.params, (0, _viatomPm10Protocol.pm10GetCaseData)(1))];
|
|
43
|
+
if (this.info) this.params.onResult({
|
|
44
|
+
caseType: _caseType.CaseType.RESULT,
|
|
45
|
+
measurementTypeKey: _core.MeasurementTypeKey.ecg,
|
|
46
|
+
heartRate: this.info.heartRate,
|
|
47
|
+
diagramPoints: this.pages,
|
|
48
|
+
duration: this.pages.length / 125,
|
|
49
|
+
recordedAt: this.info.recordedAt
|
|
50
|
+
});
|
|
51
|
+
this.phase = "done";
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
exports.Pm10Sequencer = Pm10Sequencer;
|
|
57
|
+
//# sourceMappingURL=viatom.pm10.sequencer.js.map
|
package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.pm10.sequencer.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_core","require","_caseType","_viatomPm10Protocol","command","params","frame","write","withoutResponse","Pm10Sequencer","phase","pages","constructor","initialCommands","pm10GetTotal","isHistoryTransfer","isNormalDisconnect","nextCommand","response","decodePm10Frame","undefined","head","pm10GetCaseInfo","info","decodePm10CaseInfo","content","pm10GetCaseData","push","decodePm10WavePage","last","Number","parseInt","onResult","caseType","CaseType","RESULT","measurementTypeKey","MeasurementTypeKey","ecg","heartRate","diagramPoints","duration","length","recordedAt","exports"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.pm10.sequencer.ts"],"mappings":";;;;;;AAEA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AAIA,IAAAE,mBAAA,GAAAF,OAAA;AAPA;;AAUA,MAAMG,OAAO,GAAGA,CAACC,MAAc,EAAEC,KAAwB,MAAqB;EAAE,GAAGD,MAAM,CAACE,KAAK;EAAED,KAAK;EAAEE,eAAe,EAAE;AAAK,CAAC,CAAC;AACzH,MAAMC,aAAa,CAA6B;EAC7CC,KAAK,GAAuC,OAAO;EAEnDC,KAAK,GAAa,EAAE;EACrBC,WAAWA,CAAkBP,MAAc,EAAE;IAAA,KAAhBA,MAAc,GAAdA,MAAc;EAAG;EAC9CQ,eAAe,GAAGA,CAAA,KAAgC,CAACT,OAAO,CAAC,IAAI,CAACC,MAAM,EAAE,IAAAS,gCAAY,EAAC,CAAC,CAAC,CAAC;EACxFC,iBAAiB,GAAGA,CAAA,KAAe,IAAI;EACvCC,kBAAkB,GAAGA,CAAA,KAAe,IAAI,CAACN,KAAK,KAAK,MAAM;EACzDO,WAAW,GAAIX,KAAwB,IAA2C;IACvF,MAAMY,QAAQ,GAAG,IAAAC,mCAAe,EAACb,KAAK,CAAC;IACvC,IAAI,CAACY,QAAQ,EAAE,OAAOE,SAAS;IAC/B,IAAIF,QAAQ,CAACG,IAAI,KAAK,IAAI,IAAI,IAAI,CAACX,KAAK,KAAK,OAAO,EAAE;MAAE,IAAI,CAACA,KAAK,GAAG,MAAM;MAAE,OAAO,CAACN,OAAO,CAAC,IAAI,CAACC,MAAM,EAAE,IAAAiB,mCAAe,EAAC,CAAC,CAAC,CAAC,CAAC;IAAE;IAChI,IAAIJ,QAAQ,CAACG,IAAI,KAAK,IAAI,IAAI,IAAI,CAACX,KAAK,KAAK,MAAM,EAAE;MAAE,IAAI,CAACa,IAAI,GAAG,IAAAC,sCAAkB,EAACN,QAAQ,CAACO,OAAO,CAAC;MAAE,IAAI,CAACd,KAAK,GAAG,EAAE;MAAE,IAAI,CAACD,KAAK,GAAG,MAAM;MAAE,OAAO,CAACN,OAAO,CAAC,IAAI,CAACC,MAAM,EAAE,IAAAqB,mCAAe,EAAC,CAAC,CAAC,CAAC,CAAC;IAAE;IAClM,IAAIR,QAAQ,CAACG,IAAI,KAAK,IAAI,IAAI,IAAI,CAACX,KAAK,KAAK,MAAM,EAAE;MACnD,IAAI,CAACC,KAAK,CAACgB,IAAI,CAAC,GAAG,IAAAC,sCAAkB,EAACV,QAAQ,CAACO,OAAO,CAAC,CAAC;MACxD,MAAMI,IAAI,GAAG,CAACC,MAAM,CAACC,QAAQ,CAACb,QAAQ,CAACO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,MAAM,CAAC;MAC5E,IAAI,CAACI,IAAI,EAAE,OAAO,CAACzB,OAAO,CAAC,IAAI,CAACC,MAAM,EAAE,IAAAqB,mCAAe,EAAC,CAAC,CAAC,CAAC,CAAC;MAC5D,IAAI,IAAI,CAACH,IAAI,EAAE,IAAI,CAAClB,MAAM,CAAC2B,QAAQ,CAAC;QAAEC,QAAQ,EAAEC,kBAAQ,CAACC,MAAM;QAAEC,kBAAkB,EAAEC,wBAAkB,CAACC,GAAG;QAAEC,SAAS,EAAE,IAAI,CAAChB,IAAI,CAACgB,SAAS;QAAEC,aAAa,EAAE,IAAI,CAAC7B,KAAK;QAAE8B,QAAQ,EAAE,IAAI,CAAC9B,KAAK,CAAC+B,MAAM,GAAG,GAAG;QAAEC,UAAU,EAAE,IAAI,CAACpB,IAAI,CAACoB;MAAW,CAAC,CAAC;MAC9O,IAAI,CAACjC,KAAK,GAAG,MAAM;IACrB;IACA,OAAOU,SAAS;EAClB,CAAC;AACH;AAACwB,OAAA,CAAAnC,aAAA,GAAAA,aAAA","ignoreList":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.wbp02MainServices = exports.Wbp02Device = void 0;
|
|
7
|
+
var _btManagedDevice = require("../bt-managed-device.js");
|
|
8
|
+
var _viatomWbp02Protocol = require("./viatom.wbp02.protocol.js");
|
|
9
|
+
var _viatomWbp02Sequencer = require("./viatom.wbp02.sequencer.js");
|
|
10
|
+
/* eslint-disable import/group-exports, import/order, padding-line-between-statements */
|
|
11
|
+
|
|
12
|
+
const acceptEverything = {
|
|
13
|
+
caseValuePosition: [],
|
|
14
|
+
cases: []
|
|
15
|
+
};
|
|
16
|
+
const wbp02MainServices = exports.wbp02MainServices = [{
|
|
17
|
+
uuid: _viatomWbp02Protocol.WBP02_DATA_SERVICE,
|
|
18
|
+
monitorUuids: [{
|
|
19
|
+
uuid: _viatomWbp02Protocol.WBP02_NOTIFY,
|
|
20
|
+
parsingModel: acceptEverything
|
|
21
|
+
}]
|
|
22
|
+
}, {
|
|
23
|
+
uuid: _viatomWbp02Protocol.WBP02_CONTROL_SERVICE,
|
|
24
|
+
monitorUuids: [],
|
|
25
|
+
writeUuid: {
|
|
26
|
+
uuid: _viatomWbp02Protocol.WBP02_WRITE,
|
|
27
|
+
mainCommandUuid: "5a"
|
|
28
|
+
}
|
|
29
|
+
}];
|
|
30
|
+
class Wbp02Device extends _btManagedDevice.BTManagedDevice {
|
|
31
|
+
mainServices = wbp02MainServices;
|
|
32
|
+
stuckDataTimeout = 120_000;
|
|
33
|
+
onStreamStart = undefined;
|
|
34
|
+
constructor(device, params) {
|
|
35
|
+
super(device, params);
|
|
36
|
+
this.frameReader = new _viatomWbp02Protocol.Wbp02FrameReader();
|
|
37
|
+
this.createCommandSequencer = () => new _viatomWbp02Sequencer.Wbp02Sequencer({
|
|
38
|
+
write: {
|
|
39
|
+
serviceUuid: _viatomWbp02Protocol.WBP02_CONTROL_SERVICE,
|
|
40
|
+
characteristicUuid: _viatomWbp02Protocol.WBP02_WRITE
|
|
41
|
+
},
|
|
42
|
+
onResult: result => this.onResult?.(result)
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
handleSuccessResult() {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.Wbp02Device = Wbp02Device;
|
|
50
|
+
//# sourceMappingURL=viatom.wbp02.device.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_btManagedDevice","require","_viatomWbp02Protocol","_viatomWbp02Sequencer","acceptEverything","caseValuePosition","cases","wbp02MainServices","exports","uuid","WBP02_DATA_SERVICE","monitorUuids","WBP02_NOTIFY","parsingModel","WBP02_CONTROL_SERVICE","writeUuid","WBP02_WRITE","mainCommandUuid","Wbp02Device","BTManagedDevice","mainServices","stuckDataTimeout","onStreamStart","undefined","constructor","device","params","frameReader","Wbp02FrameReader","createCommandSequencer","Wbp02Sequencer","write","serviceUuid","characteristicUuid","onResult","result","handleSuccessResult"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.wbp02.device.ts"],"mappings":";;;;;;AAQA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,oBAAA,GAAAD,OAAA;AACA,IAAAE,qBAAA,GAAAF,OAAA;AAVA;;AAYA,MAAMG,gBAAgB,GAAG;EAAEC,iBAAiB,EAAE,EAAE;EAAEC,KAAK,EAAE;AAAG,CAAC;AACtD,MAAMC,iBAA6B,GAAAC,OAAA,CAAAD,iBAAA,GAAG,CAC3C;EAAEE,IAAI,EAAEC,uCAAkB;EAAEC,YAAY,EAAE,CAAC;IAAEF,IAAI,EAAEG,iCAAY;IAAEC,YAAY,EAAET;EAAiB,CAAC;AAAE,CAAC,EACpG;EAAEK,IAAI,EAAEK,0CAAqB;EAAEH,YAAY,EAAE,EAAE;EAAEI,SAAS,EAAE;IAAEN,IAAI,EAAEO,gCAAW;IAAEC,eAAe,EAAE;EAAK;AAAE,CAAC,CAC3G;AAEM,MAAMC,WAAW,SAASC,gCAAe,CAA2B;EAC/DC,YAAY,GAAGb,iBAAiB;EAChCc,gBAAgB,GAAG,OAAO;EAC1BC,aAAa,GAAGC,SAAS;EAC5BC,WAAWA,CAACC,MAAc,EAAEC,MAAoD,EAAE;IACvF,KAAK,CAACD,MAAM,EAAEC,MAAM,CAAC;IACrB,IAAI,CAACC,WAAW,GAAG,IAAIC,qCAAgB,CAAC,CAAC;IACzC,IAAI,CAACC,sBAAsB,GAAG,MAAM,IAAIC,oCAAc,CAAC;MAAEC,KAAK,EAAE;QAAEC,WAAW,EAAElB,0CAAqB;QAAEmB,kBAAkB,EAAEjB;MAAY,CAAC;MAAEkB,QAAQ,EAAGC,MAAM,IAAK,IAAI,CAACD,QAAQ,GAAGC,MAAyF;IAAE,CAAC,CAAC;EAC9Q;EACUC,mBAAmBA,CAAA,EAAS;IAAE;EAAQ;AAClD;AAAC5B,OAAA,CAAAU,WAAA,GAAAA,WAAA","ignoreList":[]}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.wbp02SyncTime = exports.wbp02RecordCount = exports.wbp02Record = exports.wbp02Login = exports.wbp02Crc = exports.wbp02Connect = exports.wbp02Command = exports.parseWbp02Record = exports.decodeWbp02Response = exports.Wbp02FrameReader = exports.WBP02_WRITE = exports.WBP02_NOTIFY = exports.WBP02_DATA_SERVICE = exports.WBP02_CONTROL_SERVICE = void 0;
|
|
7
|
+
var _frameReadStatus = require("../../../types/frame-read-status.js");
|
|
8
|
+
var _hexToByte = require("../../../utils/hex-to-byte.js");
|
|
9
|
+
/* eslint-disable import/group-exports, import/order, padding-line-between-statements, curly, max-lines */
|
|
10
|
+
|
|
11
|
+
const WBP02_CONTROL_SERVICE = exports.WBP02_CONTROL_SERVICE = "0000ffe5-0000-1000-8000-00805f9b34fb";
|
|
12
|
+
const WBP02_WRITE = exports.WBP02_WRITE = "0000ffe9-0000-1000-8000-00805f9b34fb";
|
|
13
|
+
const WBP02_DATA_SERVICE = exports.WBP02_DATA_SERVICE = "0000ffe0-0000-1000-8000-00805f9b34fb";
|
|
14
|
+
const WBP02_NOTIFY = exports.WBP02_NOTIFY = "0000ffe4-0000-1000-8000-00805f9b34fb";
|
|
15
|
+
const byte = value => (value & 0xff).toString(16).padStart(2, "0");
|
|
16
|
+
|
|
17
|
+
/** CRC-16 used by the WBP-02 service, returned low byte first. */
|
|
18
|
+
const wbp02Crc = bytes => {
|
|
19
|
+
let crc = 0xffff;
|
|
20
|
+
for (const value of bytes) {
|
|
21
|
+
crc ^= (0, _hexToByte.hexToByte)(value);
|
|
22
|
+
for (let bit = 0; bit < 8; bit += 1) {
|
|
23
|
+
crc = (crc & 1) !== 0 ? crc >>> 1 ^ 0xa001 : crc >>> 1;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return [byte(crc), byte(crc >> 8)];
|
|
27
|
+
};
|
|
28
|
+
exports.wbp02Crc = wbp02Crc;
|
|
29
|
+
const wbp02Command = (command, payload = []) => {
|
|
30
|
+
const body = ["5a", byte(payload.length + 5), byte(command), ...payload.map(byte)];
|
|
31
|
+
return [...body, ...wbp02Crc(body)];
|
|
32
|
+
};
|
|
33
|
+
exports.wbp02Command = wbp02Command;
|
|
34
|
+
const wbp02Connect = () => wbp02Command(0x10);
|
|
35
|
+
exports.wbp02Connect = wbp02Connect;
|
|
36
|
+
const wbp02SyncTime = (date = new Date()) => wbp02Command(0x12, [date.getFullYear() % 100, date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes()]);
|
|
37
|
+
exports.wbp02SyncTime = wbp02SyncTime;
|
|
38
|
+
const wbp02Login = () => wbp02Command(0x13, [0, 0, 0x45, 0x67]);
|
|
39
|
+
exports.wbp02Login = wbp02Login;
|
|
40
|
+
const wbp02RecordCount = () => wbp02Command(0x53);
|
|
41
|
+
exports.wbp02RecordCount = wbp02RecordCount;
|
|
42
|
+
const wbp02Record = index => wbp02Command(0x54, [index >> 8 & 0xff, index & 0xff]);
|
|
43
|
+
exports.wbp02Record = wbp02Record;
|
|
44
|
+
const decodeWbp02Response = frame => {
|
|
45
|
+
const length = (0, _hexToByte.hexToByte)(frame[1] ?? "00");
|
|
46
|
+
if ((0, _hexToByte.hexToByte)(frame[0] ?? "00") !== 0x5a || length < 7 || frame.length < length) return undefined;
|
|
47
|
+
const complete = frame.slice(0, length);
|
|
48
|
+
const crc = wbp02Crc(complete.slice(0, -2));
|
|
49
|
+
if (complete.at(-2) !== crc[0] || complete.at(-1) !== crc[1]) return undefined;
|
|
50
|
+
return {
|
|
51
|
+
command: (0, _hexToByte.hexToByte)(complete[2] ?? "00"),
|
|
52
|
+
content: complete.slice(3, -2)
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
exports.decodeWbp02Response = decodeWbp02Response;
|
|
56
|
+
const parseWbp02Record = content => {
|
|
57
|
+
if (content.length < 13) return undefined;
|
|
58
|
+
const value = offset => (0, _hexToByte.hexToByte)(content[offset] ?? "00") << 8 | (0, _hexToByte.hexToByte)(content[offset + 1] ?? "00");
|
|
59
|
+
const year = 2000 + (0, _hexToByte.hexToByte)(content[6] ?? "00");
|
|
60
|
+
const month = (0, _hexToByte.hexToByte)(content[7] ?? "00");
|
|
61
|
+
const day = (0, _hexToByte.hexToByte)(content[8] ?? "00");
|
|
62
|
+
const hour = (0, _hexToByte.hexToByte)(content[9] ?? "00");
|
|
63
|
+
const minute = (0, _hexToByte.hexToByte)(content[10] ?? "00");
|
|
64
|
+
if (month < 1 || month > 12 || day < 1 || day > 31 || value(0) < 20 || value(0) > 300 || value(2) < 10 || value(2) > 200) return undefined;
|
|
65
|
+
const recordedAt = new Date(year, month - 1, day, hour, minute);
|
|
66
|
+
return {
|
|
67
|
+
systolic: value(0),
|
|
68
|
+
diastolic: value(2),
|
|
69
|
+
heartRate: value(4),
|
|
70
|
+
recordedAt,
|
|
71
|
+
recordingId: `wbp02:${recordedAt.toISOString()}`
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
exports.parseWbp02Record = parseWbp02Record;
|
|
75
|
+
class Wbp02FrameReader {
|
|
76
|
+
readFrame(buffer) {
|
|
77
|
+
const start = buffer.findIndex(value => (0, _hexToByte.hexToByte)(value) === 0x5a);
|
|
78
|
+
if (start < 0) return {
|
|
79
|
+
status: _frameReadStatus.FrameReadStatus.INCOMPLETE,
|
|
80
|
+
consumedBytes: Math.max(0, buffer.length - 1)
|
|
81
|
+
};
|
|
82
|
+
if (start + 2 > buffer.length) return {
|
|
83
|
+
status: _frameReadStatus.FrameReadStatus.INCOMPLETE,
|
|
84
|
+
consumedBytes: start
|
|
85
|
+
};
|
|
86
|
+
const length = (0, _hexToByte.hexToByte)(buffer[start + 1] ?? "00");
|
|
87
|
+
if (length < 7) return {
|
|
88
|
+
status: _frameReadStatus.FrameReadStatus.CORRUPT,
|
|
89
|
+
consumedBytes: start + 1
|
|
90
|
+
};
|
|
91
|
+
if (start + length > buffer.length) return {
|
|
92
|
+
status: _frameReadStatus.FrameReadStatus.INCOMPLETE,
|
|
93
|
+
consumedBytes: start
|
|
94
|
+
};
|
|
95
|
+
const frame = buffer.slice(start, start + length);
|
|
96
|
+
if (!decodeWbp02Response(frame)) return {
|
|
97
|
+
status: _frameReadStatus.FrameReadStatus.CORRUPT,
|
|
98
|
+
consumedBytes: start + 1
|
|
99
|
+
};
|
|
100
|
+
return {
|
|
101
|
+
status: _frameReadStatus.FrameReadStatus.COMPLETE,
|
|
102
|
+
consumedBytes: start + length,
|
|
103
|
+
frame
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.Wbp02FrameReader = Wbp02FrameReader;
|
|
108
|
+
//# sourceMappingURL=viatom.wbp02.protocol.js.map
|