@ovok/native 1.6.24 → 1.6.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-entries.js +1 -1
  2. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-entries.js.map +1 -1
  3. package/lib/commonjs/modules/bt-device/constants/supported-devices.js +1 -1
  4. package/lib/commonjs/modules/bt-device/constants/supported-devices.js.map +1 -1
  5. package/lib/commonjs/modules/bt-management/services/custom/compile-custom-lepu.js +7 -0
  6. package/lib/commonjs/modules/bt-management/services/custom/compile-custom-lepu.js.map +1 -1
  7. package/lib/commonjs/modules/bt-management/services/devices/aoj/aoj.thermometers.js +8 -3
  8. package/lib/commonjs/modules/bt-management/services/devices/aoj/aoj.thermometers.js.map +1 -1
  9. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.device.js +7 -1
  10. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.device.js.map +1 -1
  11. package/lib/commonjs/modules/bt-management/services/devices/bt-data-processor.js +37 -0
  12. package/lib/commonjs/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
  13. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js +7 -1
  14. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  15. package/lib/commonjs/modules/bt-management/services/devices/custom/custom.device.js +7 -2
  16. package/lib/commonjs/modules/bt-management/services/devices/custom/custom.device.js.map +1 -1
  17. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.commands.js +2 -0
  18. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.commands.js.map +1 -1
  19. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.device-names.js +13 -4
  20. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.device-names.js.map +1 -1
  21. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.ecg-transfer.js +77 -0
  22. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.ecg-transfer.js.map +1 -0
  23. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.file-transfer.js +1 -1
  24. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.file-transfer.js.map +1 -1
  25. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.identity-gate.js +2 -2
  26. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.identity-gate.js.map +1 -1
  27. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.name-match.js +3 -0
  28. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.name-match.js.map +1 -1
  29. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.transports.js +8 -0
  30. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.transports.js.map +1 -1
  31. package/lib/commonjs/modules/bt-management/services/devices/spo/pc60fw.frame-reader.js +71 -0
  32. package/lib/commonjs/modules/bt-management/services/devices/spo/pc60fw.frame-reader.js.map +1 -0
  33. package/lib/commonjs/modules/bt-management/services/devices/spo/spo2.device.js +31 -5
  34. package/lib/commonjs/modules/bt-management/services/devices/spo/spo2.device.js.map +1 -1
  35. package/lib/commonjs/modules/bt-management/services/devices/spo/spo2.main-services.js +5 -0
  36. package/lib/commonjs/modules/bt-management/services/devices/spo/spo2.main-services.js.map +1 -1
  37. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-device.js +24 -3
  38. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-device.js.map +1 -1
  39. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-record.js +98 -0
  40. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-record.js.map +1 -0
  41. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js +215 -55
  42. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js.map +1 -1
  43. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js +16 -3
  44. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js.map +1 -1
  45. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-files.js +1 -1
  46. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-files.js.map +1 -1
  47. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.js +8 -1
  48. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.js.map +1 -1
  49. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.lepod.js +1 -0
  50. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.lepod.js.map +1 -1
  51. package/lib/commonjs/modules/bt-management/types/clock-sync.js +1 -0
  52. package/lib/commonjs/modules/bt-management/types/clock-sync.js.map +1 -1
  53. package/lib/commonjs/modules/bt-management/utils/calculate-crc-8-maxim.js +24 -0
  54. package/lib/commonjs/modules/bt-management/utils/calculate-crc-8-maxim.js.map +1 -0
  55. package/lib/commonjs/modules/bt-management/utils/convert-ecg-diagnostic-flag.js +19 -27
  56. package/lib/commonjs/modules/bt-management/utils/convert-ecg-diagnostic-flag.js.map +1 -1
  57. package/lib/module/modules/bt-device/constants/supported-device-catalog-entries.js +2 -2
  58. package/lib/module/modules/bt-device/constants/supported-device-catalog-entries.js.map +1 -1
  59. package/lib/module/modules/bt-device/constants/supported-devices.js +1 -1
  60. package/lib/module/modules/bt-device/constants/supported-devices.js.map +1 -1
  61. package/lib/module/modules/bt-management/services/custom/compile-custom-lepu.js +7 -0
  62. package/lib/module/modules/bt-management/services/custom/compile-custom-lepu.js.map +1 -1
  63. package/lib/module/modules/bt-management/services/devices/aoj/aoj.thermometers.js +8 -3
  64. package/lib/module/modules/bt-management/services/devices/aoj/aoj.thermometers.js.map +1 -1
  65. package/lib/module/modules/bt-management/services/devices/bp2/bp2.device.js +7 -1
  66. package/lib/module/modules/bt-management/services/devices/bp2/bp2.device.js.map +1 -1
  67. package/lib/module/modules/bt-management/services/devices/bt-data-processor.js +37 -0
  68. package/lib/module/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
  69. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js +7 -1
  70. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  71. package/lib/module/modules/bt-management/services/devices/custom/custom.device.js +7 -2
  72. package/lib/module/modules/bt-management/services/devices/custom/custom.device.js.map +1 -1
  73. package/lib/module/modules/bt-management/services/devices/lepu/lepu.commands.js +2 -0
  74. package/lib/module/modules/bt-management/services/devices/lepu/lepu.commands.js.map +1 -1
  75. package/lib/module/modules/bt-management/services/devices/lepu/lepu.device-names.js +13 -3
  76. package/lib/module/modules/bt-management/services/devices/lepu/lepu.device-names.js.map +1 -1
  77. package/lib/module/modules/bt-management/services/devices/lepu/lepu.ecg-transfer.js +73 -0
  78. package/lib/module/modules/bt-management/services/devices/lepu/lepu.ecg-transfer.js.map +1 -0
  79. package/lib/module/modules/bt-management/services/devices/lepu/lepu.file-transfer.js +1 -1
  80. package/lib/module/modules/bt-management/services/devices/lepu/lepu.file-transfer.js.map +1 -1
  81. package/lib/module/modules/bt-management/services/devices/lepu/lepu.identity-gate.js +2 -2
  82. package/lib/module/modules/bt-management/services/devices/lepu/lepu.identity-gate.js.map +1 -1
  83. package/lib/module/modules/bt-management/services/devices/lepu/lepu.name-match.js +4 -1
  84. package/lib/module/modules/bt-management/services/devices/lepu/lepu.name-match.js.map +1 -1
  85. package/lib/module/modules/bt-management/services/devices/lepu/lepu.transports.js +8 -0
  86. package/lib/module/modules/bt-management/services/devices/lepu/lepu.transports.js.map +1 -1
  87. package/lib/module/modules/bt-management/services/devices/spo/pc60fw.frame-reader.js +66 -0
  88. package/lib/module/modules/bt-management/services/devices/spo/pc60fw.frame-reader.js.map +1 -0
  89. package/lib/module/modules/bt-management/services/devices/spo/spo2.device.js +31 -5
  90. package/lib/module/modules/bt-management/services/devices/spo/spo2.device.js.map +1 -1
  91. package/lib/module/modules/bt-management/services/devices/spo/spo2.main-services.js +5 -0
  92. package/lib/module/modules/bt-management/services/devices/spo/spo2.main-services.js.map +1 -1
  93. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-device.js +24 -3
  94. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-device.js.map +1 -1
  95. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-record.js +92 -0
  96. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-record.js.map +1 -0
  97. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js +211 -50
  98. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js.map +1 -1
  99. package/lib/module/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js +16 -3
  100. package/lib/module/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js.map +1 -1
  101. package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-files.js +1 -1
  102. package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-files.js.map +1 -1
  103. package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.js +8 -1
  104. package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.js.map +1 -1
  105. package/lib/module/modules/bt-management/services/devices/viatom/viatom.lepod.js +1 -0
  106. package/lib/module/modules/bt-management/services/devices/viatom/viatom.lepod.js.map +1 -1
  107. package/lib/module/modules/bt-management/types/clock-sync.js +1 -0
  108. package/lib/module/modules/bt-management/types/clock-sync.js.map +1 -1
  109. package/lib/module/modules/bt-management/types/device-measurement-map.js.map +1 -1
  110. package/lib/module/modules/bt-management/utils/calculate-crc-8-maxim.js +19 -0
  111. package/lib/module/modules/bt-management/utils/calculate-crc-8-maxim.js.map +1 -0
  112. package/lib/module/modules/bt-management/utils/convert-ecg-diagnostic-flag.js +19 -27
  113. package/lib/module/modules/bt-management/utils/convert-ecg-diagnostic-flag.js.map +1 -1
  114. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-entries.d.ts.map +1 -1
  115. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-devices.d.ts.map +1 -1
  116. package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-lepu.d.ts.map +1 -1
  117. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/aoj/aoj.thermometers.d.ts.map +1 -1
  118. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts.map +1 -1
  119. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-data-processor.d.ts +8 -0
  120. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-data-processor.d.ts.map +1 -1
  121. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  122. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom.device.d.ts.map +1 -1
  123. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.commands.d.ts +2 -0
  124. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.commands.d.ts.map +1 -1
  125. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts +9 -3
  126. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts.map +1 -1
  127. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.ecg-transfer.d.ts +41 -0
  128. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.ecg-transfer.d.ts.map +1 -0
  129. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts +2 -0
  130. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts.map +1 -1
  131. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.identity-gate.d.ts +2 -0
  132. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.identity-gate.d.ts.map +1 -1
  133. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.name-match.d.ts.map +1 -1
  134. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts +8 -1
  135. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts.map +1 -1
  136. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/spo/pc60fw.frame-reader.d.ts +8 -0
  137. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/spo/pc60fw.frame-reader.d.ts.map +1 -0
  138. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/spo/spo2.device.d.ts +5 -0
  139. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/spo/spo2.device.d.ts.map +1 -1
  140. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/spo/spo2.main-services.d.ts.map +1 -1
  141. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts +2 -1
  142. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts.map +1 -1
  143. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-record.d.ts +41 -0
  144. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-record.d.ts.map +1 -0
  145. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts +50 -18
  146. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts.map +1 -1
  147. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts.map +1 -1
  148. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.ecg-files.d.ts.map +1 -1
  149. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.d.ts.map +1 -1
  150. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.lepod.d.ts.map +1 -1
  151. package/lib/typescript/commonjs/src/modules/bt-management/types/clock-sync.d.ts.map +1 -1
  152. package/lib/typescript/commonjs/src/modules/bt-management/types/command-sequencer.d.ts +10 -0
  153. package/lib/typescript/commonjs/src/modules/bt-management/types/command-sequencer.d.ts.map +1 -1
  154. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-lepu-spec.d.ts +2 -0
  155. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-lepu-spec.d.ts.map +1 -1
  156. package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts +4 -1
  157. package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
  158. package/lib/typescript/commonjs/src/modules/bt-management/utils/calculate-crc-8-maxim.d.ts +3 -0
  159. package/lib/typescript/commonjs/src/modules/bt-management/utils/calculate-crc-8-maxim.d.ts.map +1 -0
  160. package/lib/typescript/commonjs/src/modules/bt-management/utils/convert-ecg-diagnostic-flag.d.ts.map +1 -1
  161. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-entries.d.ts.map +1 -1
  162. package/lib/typescript/module/src/modules/bt-device/constants/supported-devices.d.ts.map +1 -1
  163. package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-lepu.d.ts.map +1 -1
  164. package/lib/typescript/module/src/modules/bt-management/services/devices/aoj/aoj.thermometers.d.ts.map +1 -1
  165. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts.map +1 -1
  166. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-data-processor.d.ts +8 -0
  167. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-data-processor.d.ts.map +1 -1
  168. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  169. package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom.device.d.ts.map +1 -1
  170. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.commands.d.ts +2 -0
  171. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.commands.d.ts.map +1 -1
  172. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts +9 -3
  173. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts.map +1 -1
  174. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.ecg-transfer.d.ts +41 -0
  175. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.ecg-transfer.d.ts.map +1 -0
  176. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts +2 -0
  177. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts.map +1 -1
  178. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.identity-gate.d.ts +2 -0
  179. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.identity-gate.d.ts.map +1 -1
  180. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.name-match.d.ts.map +1 -1
  181. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts +8 -1
  182. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts.map +1 -1
  183. package/lib/typescript/module/src/modules/bt-management/services/devices/spo/pc60fw.frame-reader.d.ts +8 -0
  184. package/lib/typescript/module/src/modules/bt-management/services/devices/spo/pc60fw.frame-reader.d.ts.map +1 -0
  185. package/lib/typescript/module/src/modules/bt-management/services/devices/spo/spo2.device.d.ts +5 -0
  186. package/lib/typescript/module/src/modules/bt-management/services/devices/spo/spo2.device.d.ts.map +1 -1
  187. package/lib/typescript/module/src/modules/bt-management/services/devices/spo/spo2.main-services.d.ts.map +1 -1
  188. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts +2 -1
  189. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts.map +1 -1
  190. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-record.d.ts +41 -0
  191. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-record.d.ts.map +1 -0
  192. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts +50 -18
  193. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts.map +1 -1
  194. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts.map +1 -1
  195. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.ecg-files.d.ts.map +1 -1
  196. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.d.ts.map +1 -1
  197. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.lepod.d.ts.map +1 -1
  198. package/lib/typescript/module/src/modules/bt-management/types/clock-sync.d.ts.map +1 -1
  199. package/lib/typescript/module/src/modules/bt-management/types/command-sequencer.d.ts +10 -0
  200. package/lib/typescript/module/src/modules/bt-management/types/command-sequencer.d.ts.map +1 -1
  201. package/lib/typescript/module/src/modules/bt-management/types/custom-lepu-spec.d.ts +2 -0
  202. package/lib/typescript/module/src/modules/bt-management/types/custom-lepu-spec.d.ts.map +1 -1
  203. package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts +4 -1
  204. package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
  205. package/lib/typescript/module/src/modules/bt-management/utils/calculate-crc-8-maxim.d.ts +3 -0
  206. package/lib/typescript/module/src/modules/bt-management/utils/calculate-crc-8-maxim.d.ts.map +1 -0
  207. package/lib/typescript/module/src/modules/bt-management/utils/convert-ecg-diagnostic-flag.d.ts.map +1 -1
  208. package/package.json +1 -1
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ import { FrameReadStatus } from "../../../types/frame-read-status.js";
4
+ import { calculateCrc8Maxim } from "../../../utils/calculate-crc-8-maxim.js";
5
+ import { hexToByte } from "../../../utils/hex-to-byte.js";
6
+ const HEADER = ["aa", "55"];
7
+ const LENGTH_INDEX = 3;
8
+ const HEADER_BYTES = 4;
9
+ const CHECKSUM_BYTES = 1;
10
+ const byteAt = (buffer, index) => hexToByte(buffer[index] ?? "0");
11
+
12
+ /** Reads the length-prefixed, CRC-8/MAXIM frames used by PC-60FW. */
13
+ export class Pc60FwFrameReader {
14
+ readFrame(buffer) {
15
+ const start = this.findHeader(buffer);
16
+ if (start === -1) {
17
+ return {
18
+ status: FrameReadStatus.INCOMPLETE,
19
+ consumedBytes: Math.max(0, buffer.length - 1)
20
+ };
21
+ }
22
+ if (start + HEADER_BYTES > buffer.length) {
23
+ return {
24
+ status: FrameReadStatus.INCOMPLETE,
25
+ consumedBytes: start
26
+ };
27
+ }
28
+ const payloadLength = byteAt(buffer, start + LENGTH_INDEX);
29
+ const frameLength = HEADER_BYTES + payloadLength;
30
+ if (payloadLength < CHECKSUM_BYTES) {
31
+ return {
32
+ status: FrameReadStatus.CORRUPT,
33
+ consumedBytes: start + HEADER.length
34
+ };
35
+ }
36
+ if (start + frameLength > buffer.length) {
37
+ return {
38
+ status: FrameReadStatus.INCOMPLETE,
39
+ consumedBytes: start
40
+ };
41
+ }
42
+ const frame = buffer.slice(start, start + frameLength);
43
+ const declared = byteAt(frame, frame.length - CHECKSUM_BYTES);
44
+ const actual = calculateCrc8Maxim(frame, frame.length - CHECKSUM_BYTES);
45
+ if (declared !== actual) {
46
+ return {
47
+ status: FrameReadStatus.CORRUPT,
48
+ consumedBytes: start + HEADER.length
49
+ };
50
+ }
51
+ return {
52
+ status: FrameReadStatus.COMPLETE,
53
+ consumedBytes: start + frameLength,
54
+ frame
55
+ };
56
+ }
57
+ findHeader(buffer) {
58
+ for (let index = 0; index < buffer.length - 1; index++) {
59
+ if (buffer[index]?.toLowerCase() === HEADER[0] && buffer[index + 1]?.toLowerCase() === HEADER[1]) {
60
+ return index;
61
+ }
62
+ }
63
+ return -1;
64
+ }
65
+ }
66
+ //# sourceMappingURL=pc60fw.frame-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FrameReadStatus","calculateCrc8Maxim","hexToByte","HEADER","LENGTH_INDEX","HEADER_BYTES","CHECKSUM_BYTES","byteAt","buffer","index","Pc60FwFrameReader","readFrame","start","findHeader","status","INCOMPLETE","consumedBytes","Math","max","length","payloadLength","frameLength","CORRUPT","frame","slice","declared","actual","COMPLETE","toLowerCase"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/spo/pc60fw.frame-reader.ts"],"mappings":";;AACA,SAASA,eAAe,QAAQ,qCAAkC;AAElE,SAASC,kBAAkB,QAAQ,yCAAsC;AACzE,SAASC,SAAS,QAAQ,+BAA4B;AAEtD,MAAMC,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AAC3B,MAAMC,YAAY,GAAG,CAAC;AACtB,MAAMC,YAAY,GAAG,CAAC;AACtB,MAAMC,cAAc,GAAG,CAAC;AAExB,MAAMC,MAAM,GAAGA,CAACC,MAAyB,EAAEC,KAAa,KACtDP,SAAS,CAACM,MAAM,CAACC,KAAK,CAAC,IAAI,GAAG,CAAC;;AAEjC;AACA,OAAO,MAAMC,iBAAiB,CAAwB;EAC7CC,SAASA,CAACH,MAAyB,EAAmB;IAC3D,MAAMI,KAAK,GAAG,IAAI,CAACC,UAAU,CAACL,MAAM,CAAC;IAErC,IAAII,KAAK,KAAK,CAAC,CAAC,EAAE;MAChB,OAAO;QACLE,MAAM,EAAEd,eAAe,CAACe,UAAU;QAClCC,aAAa,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEV,MAAM,CAACW,MAAM,GAAG,CAAC;MAC9C,CAAC;IACH;IAEA,IAAIP,KAAK,GAAGP,YAAY,GAAGG,MAAM,CAACW,MAAM,EAAE;MACxC,OAAO;QAAEL,MAAM,EAAEd,eAAe,CAACe,UAAU;QAAEC,aAAa,EAAEJ;MAAM,CAAC;IACrE;IAEA,MAAMQ,aAAa,GAAGb,MAAM,CAACC,MAAM,EAAEI,KAAK,GAAGR,YAAY,CAAC;IAC1D,MAAMiB,WAAW,GAAGhB,YAAY,GAAGe,aAAa;IAEhD,IAAIA,aAAa,GAAGd,cAAc,EAAE;MAClC,OAAO;QACLQ,MAAM,EAAEd,eAAe,CAACsB,OAAO;QAC/BN,aAAa,EAAEJ,KAAK,GAAGT,MAAM,CAACgB;MAChC,CAAC;IACH;IAEA,IAAIP,KAAK,GAAGS,WAAW,GAAGb,MAAM,CAACW,MAAM,EAAE;MACvC,OAAO;QAAEL,MAAM,EAAEd,eAAe,CAACe,UAAU;QAAEC,aAAa,EAAEJ;MAAM,CAAC;IACrE;IAEA,MAAMW,KAAK,GAAGf,MAAM,CAACgB,KAAK,CAACZ,KAAK,EAAEA,KAAK,GAAGS,WAAW,CAAC;IACtD,MAAMI,QAAQ,GAAGlB,MAAM,CAACgB,KAAK,EAAEA,KAAK,CAACJ,MAAM,GAAGb,cAAc,CAAC;IAC7D,MAAMoB,MAAM,GAAGzB,kBAAkB,CAACsB,KAAK,EAAEA,KAAK,CAACJ,MAAM,GAAGb,cAAc,CAAC;IAEvE,IAAImB,QAAQ,KAAKC,MAAM,EAAE;MACvB,OAAO;QACLZ,MAAM,EAAEd,eAAe,CAACsB,OAAO;QAC/BN,aAAa,EAAEJ,KAAK,GAAGT,MAAM,CAACgB;MAChC,CAAC;IACH;IAEA,OAAO;MACLL,MAAM,EAAEd,eAAe,CAAC2B,QAAQ;MAChCX,aAAa,EAAEJ,KAAK,GAAGS,WAAW;MAClCE;IACF,CAAC;EACH;EAEQV,UAAUA,CAACL,MAAyB,EAAU;IACpD,KAAK,IAAIC,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGD,MAAM,CAACW,MAAM,GAAG,CAAC,EAAEV,KAAK,EAAE,EAAE;MACtD,IACED,MAAM,CAACC,KAAK,CAAC,EAAEmB,WAAW,CAAC,CAAC,KAAKzB,MAAM,CAAC,CAAC,CAAC,IAC1CK,MAAM,CAACC,KAAK,GAAG,CAAC,CAAC,EAAEmB,WAAW,CAAC,CAAC,KAAKzB,MAAM,CAAC,CAAC,CAAC,EAC9C;QACA,OAAOM,KAAK;MACd;IACF;IAEA,OAAO,CAAC,CAAC;EACX;AACF","ignoreList":[]}
@@ -2,11 +2,13 @@
2
2
 
3
3
  import { CaseType } from "../../../types/case-type.js";
4
4
  import { BTManagedDevice } from "../bt-managed-device.js";
5
+ import { Pc60FwFrameReader } from "./pc60fw.frame-reader.js";
5
6
  import { spo2MainServices } from "./spo2.main-services.js";
6
7
  export class SPO2Device extends BTManagedDevice {
7
8
  onStreamStart = () => {};
8
9
  mainServices = spo2MainServices;
9
10
  stuckDataTimeout = 30_000;
11
+ frameReader = new Pc60FwFrameReader();
10
12
  validatePackage = pkg => {
11
13
  pkg = pkg.map(b => b.toLowerCase());
12
14
  let headIndex = -1;
@@ -37,14 +39,24 @@ export class SPO2Device extends BTManagedDevice {
37
39
  if (successResult.caseType === CaseType.STREAM || successResult.caseType === CaseType.OTHER) {
38
40
  return;
39
41
  }
40
- if ((collectedValues[9] ?? "0") !== "02") {
42
+ const status = Number.parseInt(collectedValues[9] ?? "0", 16);
43
+ if ((status & 0x02) === 0) {
44
+ if ((status & 0x04) === 0 && this.isValidParameterResult(successResult)) {
45
+ this.lastValidResult = this.withoutPerfusionMarker(successResult);
46
+ }
47
+ return true;
48
+ }
49
+ const lastValidResult = this.lastValidResult ?? (successResult.perfusionIndex === undefined ? successResult : undefined);
50
+ this.lastValidResult = undefined;
51
+ if (!lastValidResult) {
41
52
  return true;
42
53
  }
43
- if (!successResult.measurementTypeKey) {
44
- this.onError?.(new Error(`Measurement type is undefined for case ${successResult.caseType}`));
54
+ if (!lastValidResult.measurementTypeKey) {
55
+ this.onError?.(new Error(`Measurement type is undefined for case ${lastValidResult.caseType}`));
45
56
  return;
46
57
  }
47
- this.handlePulseOximeterResult(successResult);
58
+ this.handlePulseOximeterResult(lastValidResult);
59
+ return;
48
60
  }
49
61
  handlePulseOximeterResult(successResult) {
50
62
  const error = this.checkIfHasError(successResult);
@@ -55,10 +67,24 @@ export class SPO2Device extends BTManagedDevice {
55
67
  this.onResult?.(successResult);
56
68
  }
57
69
  checkIfHasError(successResult) {
58
- if (!successResult.bloodOxygen) {
70
+ if (!this.isValidParameterResult(successResult)) {
59
71
  return "feedback-messages.measurement.disturb-detected-error";
60
72
  }
61
73
  return undefined;
62
74
  }
75
+ isValidParameterResult(successResult) {
76
+ const bloodOxygen = successResult.bloodOxygen;
77
+ const pulseRate = successResult.pulseRate;
78
+ return typeof bloodOxygen === "number" && bloodOxygen >= 50 && bloodOxygen <= 100 && ![0, 127, 255].includes(bloodOxygen) && typeof pulseRate === "number" && pulseRate >= 20 && pulseRate <= 300 && ![0, 255, 511, 65535].includes(pulseRate);
79
+ }
80
+ withoutPerfusionMarker(successResult) {
81
+ if (successResult.perfusionIndex !== 0 && successResult.perfusionIndex !== 255) {
82
+ return successResult;
83
+ }
84
+ return {
85
+ ...successResult,
86
+ perfusionIndex: undefined
87
+ };
88
+ }
63
89
  }
64
90
  //# sourceMappingURL=spo2.device.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["CaseType","BTManagedDevice","spo2MainServices","SPO2Device","onStreamStart","mainServices","stuckDataTimeout","validatePackage","pkg","map","b","toLowerCase","headIndex","i","length","slice","toNum","hex","parseInt","lengthByte","totalLen","handleSuccessResult","successResult","collectedValues","caseType","STREAM","OTHER","measurementTypeKey","onError","Error","handlePulseOximeterResult","error","checkIfHasError","onResult","bloodOxygen","undefined"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/spo/spo2.device.ts"],"mappings":";;AAEA,SAASA,QAAQ,QAAQ,6BAA0B;AAKnD,SAASC,eAAe,QAAQ,yBAAsB;AAEtD,SAASC,gBAAgB,QAAQ,yBAAsB;AAEvD,OAAO,MAAMC,UAAU,SAASF,eAAe,CAA2B;EAC9DG,aAAa,GAAeA,CAAA,KAAM,CAAC,CAAC;EAEpCC,YAAY,GAAeH,gBAAgB;EAC3CI,gBAAgB,GAAG,MAAM;EAEzBC,eAAe,GAAgCC,GAAG,IAAK;IAC/DA,GAAG,GAAGA,GAAG,CAACC,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,WAAW,CAAC,CAAC,CAAC;IAErC,IAAIC,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,GAAG,CAACM,MAAM,GAAG,CAAC,EAAED,CAAC,EAAE,EAAE;MACvC,IAAIL,GAAG,CAACK,CAAC,CAAC,KAAK,IAAI,IAAIL,GAAG,CAACK,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;QAC1CD,SAAS,GAAGC,CAAC;QACb;MACF;IACF;IAEA,IAAID,SAAS,KAAK,CAAC,CAAC,EAAE;MACpB,OAAO,KAAK;IACd;IAEA,IAAIA,SAAS,GAAG,CAAC,EAAE;MACjBJ,GAAG,GAAGA,GAAG,CAACO,KAAK,CAACH,SAAS,CAAC;IAC5B;IAEA,IAAIJ,GAAG,CAACM,MAAM,GAAG,CAAC,EAAE;MAClB,OAAO,KAAK;IACd;IAEA,MAAME,KAAK,GAAIC,GAAY,IAAKC,QAAQ,CAACD,GAAG,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC;IAE7D,MAAME,UAAU,GAAGH,KAAK,CAACR,GAAG,CAAC,CAAC,CAAC,CAAC;IAEhC,MAAMY,QAAQ,GAAG,CAAC,GAAGD,UAAU;IAE/B,IAAIX,GAAG,CAACM,MAAM,GAAGM,QAAQ,EAAE;MACzB,OAAO,KAAK;IACd;IAEA,OAAO,IAAI;EACb,CAAC;EAESC,mBAAmBA,CAC3BC,aAEC,EACDC,eAAyB,EACT;IAChB,IACED,aAAa,CAACE,QAAQ,KAAKxB,QAAQ,CAACyB,MAAM,IAC1CH,aAAa,CAACE,QAAQ,KAAKxB,QAAQ,CAAC0B,KAAK,EACzC;MACA;IACF;IAEA,IAAI,CAACH,eAAe,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,IAAI,EAAE;MACxC,OAAO,IAAI;IACb;IAEA,IAAI,CAACD,aAAa,CAACK,kBAAkB,EAAE;MACrC,IAAI,CAACC,OAAO,GACV,IAAIC,KAAK,CACP,0CAA0CP,aAAa,CAACE,QAAQ,EAClE,CACF,CAAC;MAED;IACF;IAEA,IAAI,CAACM,yBAAyB,CAACR,aAAa,CAAC;EAC/C;EAEQQ,yBAAyBA,CAC/BR,aAAgE,EAC1D;IACN,MAAMS,KAAK,GAAG,IAAI,CAACC,eAAe,CAACV,aAAa,CAAC;IAEjD,IAAIS,KAAK,EAAE;MACT,IAAI,CAACH,OAAO,GAAGG,KAAK,CAAC;MAErB;IACF;IAEA,IAAI,CAACE,QAAQ,GAAGX,aAAa,CAAC;EAChC;EAEQU,eAAeA,CACrBV,aAAgE,EAC5C;IACpB,IAAI,CAACA,aAAa,CAACY,WAAW,EAAE;MAC9B,OAAO,sDAAsD;IAC/D;IAEA,OAAOC,SAAS;EAClB;AACF","ignoreList":[]}
1
+ {"version":3,"names":["CaseType","BTManagedDevice","Pc60FwFrameReader","spo2MainServices","SPO2Device","onStreamStart","mainServices","stuckDataTimeout","frameReader","validatePackage","pkg","map","b","toLowerCase","headIndex","i","length","slice","toNum","hex","parseInt","lengthByte","totalLen","handleSuccessResult","successResult","collectedValues","caseType","STREAM","OTHER","status","Number","isValidParameterResult","lastValidResult","withoutPerfusionMarker","perfusionIndex","undefined","measurementTypeKey","onError","Error","handlePulseOximeterResult","error","checkIfHasError","onResult","bloodOxygen","pulseRate","includes"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/spo/spo2.device.ts"],"mappings":"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","ignoreList":[]}
@@ -39,6 +39,11 @@ export const spo2MainServices = [{
39
39
  parseType: "number",
40
40
  byteIndexes: [7, 6],
41
41
  parseReference: 16
42
+ }, {
43
+ name: "perfusionIndex",
44
+ parseType: "number",
45
+ byteIndexes: [8],
46
+ customParserDefinition: value => parseInt(value, 16) / 10
42
47
  }]
43
48
  }]
44
49
  }
@@ -1 +1 @@
1
- {"version":3,"names":["MeasurementTypeKey","CaseType","spo2MainServices","uuid","monitorUuids","parsingModel","caseValuePosition","cases","measurementTypeKey","bloodOxygenPulseRate","caseType","STREAM","caseValue","parseDefinitions","description","RESULT","name","parseType","byteIndexes","parseReference"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/spo/spo2.main-services.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,YAAY;AAE/C,SAASC,QAAQ,QAAQ,6BAA0B;AAGnD,OAAO,MAAMC,gBAA4B,GAAG,CAC1C;EACEC,IAAI,EAAE,sCAAsC;EAC5CC,YAAY,EAAE,CACZ;IACED,IAAI,EAAE,sCAAsC;IAC5CE,YAAY,EAAE;MACZC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MAC/BC,KAAK,EAAE,CACL;QACEC,kBAAkB,EAAER,kBAAkB,CAACS,oBAAoB;QAC3DC,QAAQ,EAAET,QAAQ,CAACU,MAAM;QACzBC,SAAS,EAAE,UAAU;QACrBC,gBAAgB,EAAE,EAAE;QACpBC,WAAW,EAAE;MACf,CAAC,EAED;QACEN,kBAAkB,EAAER,kBAAkB,CAACS,oBAAoB;QAC3DC,QAAQ,EAAET,QAAQ,CAACU,MAAM;QACzBC,SAAS,EAAE,UAAU;QACrBC,gBAAgB,EAAE,EAAE;QACpBC,WAAW,EAAE;MACf,CAAC,EAED;QACEN,kBAAkB,EAAER,kBAAkB,CAACS,oBAAoB;QAC3DC,QAAQ,EAAET,QAAQ,CAACU,MAAM;QACzBC,SAAS,EAAE,UAAU;QACrBC,gBAAgB,EAAE;MACpB,CAAC,EAED;QACEL,kBAAkB,EAAER,kBAAkB,CAACS,oBAAoB;QAC3DC,QAAQ,EAAET,QAAQ,CAACc,MAAM;QACzBH,SAAS,EAAE,UAAU;QACrBC,gBAAgB,EAAE,CAChB;UACEG,IAAI,EAAE,aAAa;UACnBC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,CAAC;UAChBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,WAAW;UACjBC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;UACnBC,cAAc,EAAE;QAClB,CAAC;MAEL,CAAC;IAEL;EACF,CAAC;AAEL,CAAC,CACF","ignoreList":[]}
1
+ {"version":3,"names":["MeasurementTypeKey","CaseType","spo2MainServices","uuid","monitorUuids","parsingModel","caseValuePosition","cases","measurementTypeKey","bloodOxygenPulseRate","caseType","STREAM","caseValue","parseDefinitions","description","RESULT","name","parseType","byteIndexes","parseReference","customParserDefinition","value","parseInt"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/spo/spo2.main-services.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,YAAY;AAE/C,SAASC,QAAQ,QAAQ,6BAA0B;AAGnD,OAAO,MAAMC,gBAA4B,GAAG,CAC1C;EACEC,IAAI,EAAE,sCAAsC;EAC5CC,YAAY,EAAE,CACZ;IACED,IAAI,EAAE,sCAAsC;IAC5CE,YAAY,EAAE;MACZC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MAC/BC,KAAK,EAAE,CACL;QACEC,kBAAkB,EAAER,kBAAkB,CAACS,oBAAoB;QAC3DC,QAAQ,EAAET,QAAQ,CAACU,MAAM;QACzBC,SAAS,EAAE,UAAU;QACrBC,gBAAgB,EAAE,EAAE;QACpBC,WAAW,EAAE;MACf,CAAC,EAED;QACEN,kBAAkB,EAAER,kBAAkB,CAACS,oBAAoB;QAC3DC,QAAQ,EAAET,QAAQ,CAACU,MAAM;QACzBC,SAAS,EAAE,UAAU;QACrBC,gBAAgB,EAAE,EAAE;QACpBC,WAAW,EAAE;MACf,CAAC,EAED;QACEN,kBAAkB,EAAER,kBAAkB,CAACS,oBAAoB;QAC3DC,QAAQ,EAAET,QAAQ,CAACU,MAAM;QACzBC,SAAS,EAAE,UAAU;QACrBC,gBAAgB,EAAE;MACpB,CAAC,EAED;QACEL,kBAAkB,EAAER,kBAAkB,CAACS,oBAAoB;QAC3DC,QAAQ,EAAET,QAAQ,CAACc,MAAM;QACzBH,SAAS,EAAE,UAAU;QACrBC,gBAAgB,EAAE,CAChB;UACEG,IAAI,EAAE,aAAa;UACnBC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,CAAC;UAChBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,WAAW;UACjBC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;UACnBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,gBAAgB;UACtBC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,CAAC;UAChBE,sBAAsB,EAAGC,KAAa,IACpCC,QAAQ,CAACD,KAAK,EAAE,EAAE,CAAC,GAAG;QAC1B,CAAC;MAEL,CAAC;IAEL;EACF,CAAC;AAEL,CAAC,CACF","ignoreList":[]}
@@ -3,6 +3,7 @@
3
3
  import { MeasurementTypeKey } from "@ovok/core";
4
4
  import { CaseType } from "../../../types/case-type.js";
5
5
  import { BTManagedDevice } from "../bt-managed-device.js";
6
+ import { parseVerovalBloodPressureRecord } from "./veroval.ecg-record.js";
6
7
  import { decodeVerovalEcgSamples, VEROVAL_ECG_SAMPLE_RATE_HZ } from "./veroval.ecg-samples.js";
7
8
  import { VerovalEcgTransfer } from "./veroval.ecg-transfer.js";
8
9
  const SERVICE = "0000a000-0000-1000-8000-00805f9b34fb";
@@ -60,18 +61,33 @@ export class VerovalEcgDevice extends BTManagedDevice {
60
61
  serviceUuid: SERVICE,
61
62
  characteristicUuid: CONTROL_POINT
62
63
  },
63
- onRecording: this.reportRecording
64
+ onRecord: this.reportRecord,
65
+ clockSync: this.clockSync
64
66
  });
65
67
  constructor(device, params) {
66
68
  super(device, params);
69
+ this.clockSync = params.clockSync;
67
70
  }
68
71
 
69
72
  /** Nothing is reported per packet; the transfer reports the recording when it is whole. */
70
73
  handleSuccessResult() {
71
74
  return;
72
75
  }
73
- reportRecording = bytes => {
74
- const diagramPoints = decodeVerovalEcgSamples(bytes);
76
+ reportRecord = record => {
77
+ if (!record.header.isEcg) {
78
+ const bloodPressure = parseVerovalBloodPressureRecord(record.header);
79
+ if (bloodPressure) {
80
+ this.onResult?.({
81
+ caseType: CaseType.RESULT,
82
+ ...bloodPressure
83
+ });
84
+ }
85
+ return;
86
+ }
87
+ if (!record.raw || record.header.heartRate === 0) {
88
+ return;
89
+ }
90
+ const diagramPoints = decodeVerovalEcgSamples(record.raw, record.header.calibration);
75
91
  if (diagramPoints.length === 0) {
76
92
  this.onError?.(new Error("Veroval ECG: the recording held no samples."));
77
93
  return;
@@ -79,6 +95,11 @@ export class VerovalEcgDevice extends BTManagedDevice {
79
95
  this.onResult?.({
80
96
  measurementTypeKey: MeasurementTypeKey.ecg,
81
97
  caseType: CaseType.RESULT,
98
+ id: `veroval-${record.header.memorySlot}-${record.header.sequence}-${record.header.recordedAt?.getTime() ?? "unknown"}`,
99
+ memorySlot: record.header.memorySlot,
100
+ recordedAt: record.header.recordedAt,
101
+ heartRate: record.header.heartRate,
102
+ diagnosticResult: record.header.diagnosticResult,
82
103
  diagramPoints,
83
104
  duration: diagramPoints.length / VEROVAL_ECG_SAMPLE_RATE_HZ
84
105
  });
@@ -1 +1 @@
1
- {"version":3,"names":["MeasurementTypeKey","CaseType","BTManagedDevice","decodeVerovalEcgSamples","VEROVAL_ECG_SAMPLE_RATE_HZ","VerovalEcgTransfer","SERVICE","CONTROL_POINT","NOTIFY","STUCK_TIMEOUT_MS","PREFERRED_MTU","acceptEverything","caseValuePosition","cases","caseValue","caseType","OTHER","parseDefinitions","description","VerovalEcgDevice","stuckDataTimeout","preferredMtu","onStreamStart","undefined","mainServices","uuid","monitorUuids","parsingModel","validatePackage","createCommandSequencer","write","serviceUuid","characteristicUuid","onRecording","reportRecording","constructor","device","params","handleSuccessResult","bytes","diagramPoints","length","onError","Error","onResult","measurementTypeKey","ecg","RESULT","duration"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.ecg-device.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,YAAY;AAG/C,SAASC,QAAQ,QAAQ,6BAA0B;AAInD,SAASC,eAAe,QAAQ,yBAAsB;AAEtD,SACEC,uBAAuB,EACvBC,0BAA0B,QACrB,0BAAuB;AAC9B,SAASC,kBAAkB,QAAQ,2BAAwB;AAE3D,MAAMC,OAAO,GAAG,sCAAsC;;AAEtD;AACA,MAAMC,aAAa,GAAG,sCAAsC;AAC5D,MAAMC,MAAM,GAAG,sCAAsC;;AAErD;AACA,MAAMC,gBAAgB,GAAG,OAAO;AAEhC,MAAMC,aAAa,GAAG,GAAG;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAG;EACvBC,iBAAiB,EAAE,EAAE;EACrBC,KAAK,EAAE,CACL;IACEC,SAAS,EAAE,EAAE;IACbC,QAAQ,EAAEd,QAAQ,CAACe,KAAK;IACxBC,gBAAgB,EAAE,EAAE;IACpBC,WAAW,EAAE;EACf,CAAC;AAEL,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,SAASjB,eAAe,CAAgC;EACzEkB,gBAAgB,GAAGX,gBAAgB;EAC1BY,YAAY,GAAGX,aAAa;EACrCY,aAAa,GAAGC,SAAS;EAEzBC,YAAY,GAAe,CACnC;IACEC,IAAI,EAAEnB,OAAO;IACboB,YAAY,EAAE,CAAC;MAAED,IAAI,EAAEjB,MAAM;MAAEmB,YAAY,EAAEhB;IAAiB,CAAC;EACjE,CAAC,CACF;EAEkBiB,eAAe,GAAGA,CAAA,KAAe,IAAI;EAErCC,sBAAsB,GAAGA,CAAA,KAC1C,IAAIxB,kBAAkB,CAAC;IACrByB,KAAK,EAAE;MAAEC,WAAW,EAAEzB,OAAO;MAAE0B,kBAAkB,EAAEzB;IAAc,CAAC;IAClE0B,WAAW,EAAE,IAAI,CAACC;EACpB,CAAC,CAAC;EAEGC,WAAWA,CAChBC,MAAc,EACdC,MAAyD,EACzD;IACA,KAAK,CAACD,MAAM,EAAEC,MAAM,CAAC;EACvB;;EAEA;EACUC,mBAAmBA,CAAA,EAAS;IACpC;EACF;EAEQJ,eAAe,GAAIK,KAAwB,IAAW;IAC5D,MAAMC,aAAa,GAAGrC,uBAAuB,CAACoC,KAAK,CAAC;IAEpD,IAAIC,aAAa,CAACC,MAAM,KAAK,CAAC,EAAE;MAC9B,IAAI,CAACC,OAAO,GAAG,IAAIC,KAAK,CAAC,6CAA6C,CAAC,CAAC;MAExE;IACF;IAEA,IAAI,CAACC,QAAQ,GAAG;MACdC,kBAAkB,EAAE7C,kBAAkB,CAAC8C,GAAG;MAC1C/B,QAAQ,EAAEd,QAAQ,CAAC8C,MAAM;MACzBP,aAAa;MACbQ,QAAQ,EAAER,aAAa,CAACC,MAAM,GAAGrC;IACnC,CAAC,CAAC;EACJ,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["MeasurementTypeKey","CaseType","BTManagedDevice","parseVerovalBloodPressureRecord","decodeVerovalEcgSamples","VEROVAL_ECG_SAMPLE_RATE_HZ","VerovalEcgTransfer","SERVICE","CONTROL_POINT","NOTIFY","STUCK_TIMEOUT_MS","PREFERRED_MTU","acceptEverything","caseValuePosition","cases","caseValue","caseType","OTHER","parseDefinitions","description","VerovalEcgDevice","stuckDataTimeout","preferredMtu","onStreamStart","undefined","mainServices","uuid","monitorUuids","parsingModel","validatePackage","createCommandSequencer","write","serviceUuid","characteristicUuid","onRecord","reportRecord","clockSync","constructor","device","params","handleSuccessResult","record","header","isEcg","bloodPressure","onResult","RESULT","raw","heartRate","diagramPoints","calibration","length","onError","Error","measurementTypeKey","ecg","id","memorySlot","sequence","recordedAt","getTime","diagnosticResult","duration"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.ecg-device.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+
3
+ import { EcgDiagnosticFlag, MeasurementTypeKey } from "@ovok/core";
4
+ import { hexToByte } from "../../../utils/hex-to-byte.js";
5
+ const HEADER_BYTES = 80;
6
+ const ECG_RECORD_TYPE = 38;
7
+ const ECG_ERROR_OFFSET = 30;
8
+ const RECORD_TYPE_OFFSET = 71;
9
+ const RAW_SIZE_OFFSET = 40;
10
+ const USER_OFFSET = 44;
11
+ const HEART_RATE_OFFSET = 47;
12
+ const BP_ERROR_OFFSET = 62;
13
+ const BP_PULSE_OFFSET = 63;
14
+ const BP_SYSTOLIC_OFFSET = 64;
15
+ const BP_DIASTOLIC_OFFSET = 66;
16
+ const TIMESTAMP_OFFSET = 20;
17
+ const TIMESTAMP_BYTES = 6;
18
+ const byteAt = (bytes, offset) => {
19
+ const value = hexToByte(bytes[offset] ?? "00");
20
+ return Number.isFinite(value) ? value : 0;
21
+ };
22
+ const littleEndianAt = (bytes, offset, count) => bytes.slice(offset, offset + count).reduce((value, byte, index) => value | byteAt([byte], 0) << index * 8, 0);
23
+ const signed16At = (bytes, offset) => {
24
+ const value = littleEndianAt(bytes, offset, 2);
25
+ return value & 0x8000 ? value - 0x10000 : value;
26
+ };
27
+ const dateFromHeader = bytes => {
28
+ const [year = 0, month = 0, day = 0, hours = 0, minutes = 0, seconds = 0] = Array.from({
29
+ length: TIMESTAMP_BYTES
30
+ }, (_, index) => byteAt(bytes, TIMESTAMP_OFFSET + index));
31
+ const recordedAt = new Date(2000 + year, month - 1, day, hours, minutes, seconds);
32
+ return recordedAt.getFullYear() === 2000 + year && recordedAt.getMonth() === month - 1 && recordedAt.getDate() === day && recordedAt.getHours() === hours && recordedAt.getMinutes() === minutes && recordedAt.getSeconds() === seconds ? recordedAt : undefined;
33
+ };
34
+ const diagnosticFromHeader = bytes => {
35
+ if (byteAt(bytes, 48) > 0 || littleEndianAt(bytes, 56, 2) > 0) {
36
+ return EcgDiagnosticFlag.HIGH_HR;
37
+ }
38
+ if (byteAt(bytes, 49) > 0 || littleEndianAt(bytes, 58, 2) > 0) {
39
+ return EcgDiagnosticFlag.LOW_HR;
40
+ }
41
+ if (byteAt(bytes, 50) > 0 || byteAt(bytes, 52) > 0) {
42
+ return EcgDiagnosticFlag.RR_IRREGULAR;
43
+ }
44
+ return byteAt(bytes, 53) > 0 ? EcgDiagnosticFlag.POOR_WAVEFORM : undefined;
45
+ };
46
+ const calibrationFromHeader = bytes => {
47
+ const physicalMinimumMicrovolts = signed16At(bytes, 31);
48
+ const physicalMaximumMicrovolts = signed16At(bytes, 33);
49
+ const digitalMinimum = signed16At(bytes, 35);
50
+ const digitalMaximum = signed16At(bytes, 37);
51
+ return physicalMinimumMicrovolts < physicalMaximumMicrovolts && digitalMinimum < digitalMaximum ? {
52
+ physicalMinimumMicrovolts,
53
+ physicalMaximumMicrovolts,
54
+ digitalMinimum,
55
+ digitalMaximum
56
+ } : undefined;
57
+ };
58
+ const parseVerovalEcgHeader = bytes => {
59
+ if (bytes.length < HEADER_BYTES) {
60
+ return undefined;
61
+ }
62
+ const isEcg = byteAt(bytes, RECORD_TYPE_OFFSET) === ECG_RECORD_TYPE;
63
+ return {
64
+ bytes: [...bytes.slice(0, HEADER_BYTES)],
65
+ sequence: byteAt(bytes, 0),
66
+ recordedAt: dateFromHeader(bytes),
67
+ memorySlot: byteAt(bytes, USER_OFFSET) === 0 ? 1 : 2,
68
+ rawSize: littleEndianAt(bytes, RAW_SIZE_OFFSET, 4),
69
+ heartRate: byteAt(bytes, HEART_RATE_OFFSET),
70
+ diagnosticResult: diagnosticFromHeader(bytes),
71
+ calibration: calibrationFromHeader(bytes),
72
+ isEcg,
73
+ hasError: isEcg ? byteAt(bytes, ECG_ERROR_OFFSET) !== 0 : byteAt(bytes, BP_ERROR_OFFSET) !== 0
74
+ };
75
+ };
76
+ const verovalRecordId = header => `veroval-${header.memorySlot}-${header.sequence}-${header.recordedAt?.getTime() ?? "unknown"}`;
77
+ const parseVerovalBloodPressureRecord = header => {
78
+ if (header.isEcg || header.hasError) {
79
+ return undefined;
80
+ }
81
+ return {
82
+ id: verovalRecordId(header),
83
+ measurementTypeKey: MeasurementTypeKey.bloodPressure,
84
+ systolic: littleEndianAt(header.bytes, BP_SYSTOLIC_OFFSET, 2),
85
+ diastolic: littleEndianAt(header.bytes, BP_DIASTOLIC_OFFSET, 2),
86
+ heartRate: byteAt(header.bytes, BP_PULSE_OFFSET),
87
+ recordedAt: header.recordedAt,
88
+ memorySlot: header.memorySlot
89
+ };
90
+ };
91
+ export { BP_DIASTOLIC_OFFSET, BP_ERROR_OFFSET, BP_PULSE_OFFSET, BP_SYSTOLIC_OFFSET, ECG_RECORD_TYPE, HEADER_BYTES, parseVerovalBloodPressureRecord, parseVerovalEcgHeader, RECORD_TYPE_OFFSET, RAW_SIZE_OFFSET, USER_OFFSET, verovalRecordId };
92
+ //# sourceMappingURL=veroval.ecg-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EcgDiagnosticFlag","MeasurementTypeKey","hexToByte","HEADER_BYTES","ECG_RECORD_TYPE","ECG_ERROR_OFFSET","RECORD_TYPE_OFFSET","RAW_SIZE_OFFSET","USER_OFFSET","HEART_RATE_OFFSET","BP_ERROR_OFFSET","BP_PULSE_OFFSET","BP_SYSTOLIC_OFFSET","BP_DIASTOLIC_OFFSET","TIMESTAMP_OFFSET","TIMESTAMP_BYTES","byteAt","bytes","offset","value","Number","isFinite","littleEndianAt","count","slice","reduce","byte","index","signed16At","dateFromHeader","year","month","day","hours","minutes","seconds","Array","from","length","_","recordedAt","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","undefined","diagnosticFromHeader","HIGH_HR","LOW_HR","RR_IRREGULAR","POOR_WAVEFORM","calibrationFromHeader","physicalMinimumMicrovolts","physicalMaximumMicrovolts","digitalMinimum","digitalMaximum","parseVerovalEcgHeader","isEcg","sequence","memorySlot","rawSize","heartRate","diagnosticResult","calibration","hasError","verovalRecordId","header","getTime","parseVerovalBloodPressureRecord","id","measurementTypeKey","bloodPressure","systolic","diastolic"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.ecg-record.ts"],"mappings":"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","ignoreList":[]}