@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
@@ -1,32 +1,49 @@
1
1
  "use strict";
2
2
 
3
- /** Every request is a fixed twenty-byte packet, zero filled but for its group and command. */
3
+ /* eslint-disable max-lines */
4
+ import { getClockParts, isClockSyncEnabled } from "../../../types/clock-sync.js";
5
+ import { hexToByte } from "../../../utils/hex-to-byte.js";
6
+ import { parseVerovalEcgHeader } from "./veroval.ecg-record.js";
7
+
8
+ /** Every request is a fixed twenty-byte packet, zero filled after its command data. */
4
9
  const PACKET_BYTES = 20;
5
10
  const GROUP_INDEX = 1;
6
11
  const COMMAND_INDEX = 2;
7
12
  const PARAMETER_INDEX = 3;
8
13
  const DOWNLOAD_GROUP = 4;
14
+ const DOWNLOAD_WAIT = 0;
9
15
  const DOWNLOAD_MODE = 1;
10
16
  const DOWNLOAD_HEADER = 2;
11
17
  const DOWNLOAD_RAW = 3;
18
+ const SETTINGS_GROUP = 7;
19
+ const SET_TIME_GROUP = 5;
20
+ const SETTINGS_COMMAND = 2;
12
21
  const FRAME_GROUP_INDEX = 1;
13
22
  const FRAME_COMMAND_INDEX = 2;
14
23
  const FRAME_PACKET_INDEX = 3;
24
+ const MODE_USER_ONE_COUNT_INDEX = 3;
25
+ const MODE_USER_TWO_COUNT_INDEX = 4;
15
26
 
16
- /** The transfer's shape, from the vendor's own device table. */
27
+ /** The device answers a header with five notifications of sixteen bytes each. */
17
28
  const PAYLOAD_FROM = 4;
18
29
  const PAYLOAD_BYTES = 16;
19
30
  const HEADER_PACKETS = 5;
20
31
  const PACKETS_PER_SEGMENT = 16;
21
- const SEGMENTS = 34;
32
+ const SEGMENT_BYTES = PAYLOAD_BYTES * PACKETS_PER_SEGMENT;
33
+ const COMMAND_TIMEOUT_MS = 3_000;
34
+ const RAW_TIMEOUT_MS = 2_000;
35
+ const MAX_RETRIES = 2;
36
+ const SET_TIME_DELAY_MS = 1_500;
22
37
  const BYTE_MASK = 0xff;
23
- const BYTE_BITS = 8;
38
+ const byteAt = (frame, index) => {
39
+ const value = hexToByte(frame[index] ?? "00");
40
+ return Number.isFinite(value) ? value : 0;
41
+ };
24
42
  const toHex = byte => (byte & BYTE_MASK).toString(16).padStart(2, "0");
25
- const isDownloadFrame = (frame, command) => frame[FRAME_GROUP_INDEX]?.toLowerCase() === toHex(DOWNLOAD_GROUP) && frame[FRAME_COMMAND_INDEX]?.toLowerCase() === toHex(command);
26
- const isExpectedRawPacket = (frame, packetIndex) => isDownloadFrame(frame, DOWNLOAD_RAW) && frame[FRAME_PACKET_INDEX]?.toLowerCase() === toHex(packetIndex);
27
- const packet = (write, command, parameters = []) => {
43
+ const isFrame = (frame, group, command) => byteAt(frame, FRAME_GROUP_INDEX) === group && byteAt(frame, FRAME_COMMAND_INDEX) === command;
44
+ const packet = (write, group, command, parameters = [], delayBeforeWriteMs) => {
28
45
  const bytes = new Array(PACKET_BYTES).fill(0);
29
- bytes[GROUP_INDEX] = DOWNLOAD_GROUP;
46
+ bytes[GROUP_INDEX] = group;
30
47
  bytes[COMMAND_INDEX] = command;
31
48
  parameters.forEach((value, index) => {
32
49
  bytes[PARAMETER_INDEX + index] = value;
@@ -34,72 +51,216 @@ const packet = (write, command, parameters = []) => {
34
51
  return {
35
52
  ...write,
36
53
  frame: bytes.map(toHex),
37
- withoutResponse: true
54
+ withoutResponse: true,
55
+ ...(delayBeforeWriteMs === undefined ? {} : {
56
+ delayBeforeWriteMs
57
+ })
38
58
  };
39
59
  };
40
- const segmentParameters = segment => [segment & BYTE_MASK, segment >> BYTE_BITS & BYTE_MASK, segment >> BYTE_BITS * 2 & BYTE_MASK];
60
+ const payloadOf = frame => [...frame.slice(PAYLOAD_FROM, PAYLOAD_FROM + PAYLOAD_BYTES)];
61
+ const settingsCommand = write => packet(write, SETTINGS_GROUP, SETTINGS_COMMAND, [], SET_TIME_DELAY_MS);
62
+ const setTimeCommand = (write, clockSync, settings) => {
63
+ const parts = getClockParts(clockSync?.now?.() ?? new Date(), clockSync?.timezone);
64
+ return packet(write, SET_TIME_GROUP, SETTINGS_COMMAND, [parts.year % 100, parts.month, parts.day, parts.hours, parts.minutes, parts.seconds, settings[0] ?? 0, settings[1] ?? 0, settings[2] ?? 0]);
65
+ };
41
66
  /**
42
- * Downloads a recording from the Veroval ECG.
43
- *
44
- * The exchange is a fixed walk rather than a conversation: ask for the download mode, then
45
- * the header, then each second of the recording in turn. The device answers each request
46
- * with a known number of twenty-byte packets, sixteen payload bytes each, so the transfer is
47
- * paced by counting them. Notifications for live measurements, standby and device settings
48
- * share the characteristic, so only the download group and command advance the transfer.
67
+ * Downloads all records from the Veroval ECG/BP monitor.
49
68
  *
50
- * A recording is thirty-four seconds at 128 Hz. Nothing is reported until all of it has
51
- * arrived: a partial ECG that looked whole would be worse than none, and the count is what
52
- * says it is whole.
69
+ * The mode reply gives the number of records in each user memory. Headers are collected first;
70
+ * only then does the device enter raw-download mode. This matters because a blood-pressure
71
+ * record is complete in its header while an ECG needs one or more raw segments.
53
72
  */
54
- export class VerovalEcgTransfer {
55
- phase = "mode";
56
- packets = 0;
57
- segment = 0;
58
- recording = [];
73
+ class VerovalEcgTransfer {
74
+ headerPacket = 0;
75
+ headerBytes = [];
76
+ recordIndex = 0;
77
+ expectedRecords = 0;
78
+ headers = [];
79
+ ecgHeaders = [];
80
+ ecgIndex = 0;
81
+ segment = 1;
82
+ rawPacket = 0;
83
+ segmentBytes = [];
84
+ rawBytes = [];
85
+ pendingTimeout = COMMAND_TIMEOUT_MS;
86
+ retries = 0;
87
+ settings = [0, 0, 0];
59
88
  constructor(params) {
60
89
  this.params = params;
90
+ this.phase = isClockSyncEnabled(params.clockSync) ? "settings" : "mode";
61
91
  }
62
- initialCommands = () => [packet(this.params.write, DOWNLOAD_MODE)];
92
+ initialCommands = () => this.phase === "settings" ? this.remember([settingsCommand(this.params.write)], COMMAND_TIMEOUT_MS, true) : this.requestMode();
63
93
  nextCommand = frame => {
64
94
  if (this.phase === "done") {
65
95
  return undefined;
66
96
  }
97
+ if (this.phase === "settings") {
98
+ return this.nextSettings(frame);
99
+ }
67
100
  if (this.phase === "mode") {
68
- if (!isDownloadFrame(frame, DOWNLOAD_MODE)) {
69
- return undefined;
70
- }
71
- this.phase = "header";
72
- this.packets = 0;
73
- return [packet(this.params.write, DOWNLOAD_HEADER)];
101
+ return this.nextMode(frame);
74
102
  }
75
103
  if (this.phase === "header") {
76
- if (!isDownloadFrame(frame, DOWNLOAD_HEADER)) {
77
- return undefined;
104
+ return this.nextHeader(frame);
105
+ }
106
+ return this.nextRaw(frame);
107
+ };
108
+ commandTimeoutMs = () => this.phase === "done" ? undefined : this.pendingTimeout;
109
+ onCommandTimeout = () => {
110
+ if (!this.lastCommand || this.phase === "done") {
111
+ return {
112
+ terminal: true
113
+ };
114
+ }
115
+ if (this.retries >= MAX_RETRIES) {
116
+ this.phase = "done";
117
+ return {
118
+ terminal: true
119
+ };
120
+ }
121
+ this.retries += 1;
122
+ if (this.phase === "header") {
123
+ this.headerPacket = 0;
124
+ this.headerBytes = [];
125
+ }
126
+ if (this.phase === "raw") {
127
+ this.rawPacket = 0;
128
+ this.segmentBytes = [];
129
+ }
130
+ return {
131
+ commands: [this.lastCommand]
132
+ };
133
+ };
134
+ commandProgress = frame => {
135
+ if (this.phase === "settings") {
136
+ return isFrame(frame, SETTINGS_GROUP, SETTINGS_COMMAND) ? "complete" : "ignored";
137
+ }
138
+ if (this.phase === "mode") {
139
+ return isFrame(frame, DOWNLOAD_GROUP, DOWNLOAD_MODE) ? "complete" : "ignored";
140
+ }
141
+ if (this.phase === "header") {
142
+ if (!isFrame(frame, DOWNLOAD_GROUP, DOWNLOAD_HEADER) || byteAt(frame, FRAME_PACKET_INDEX) !== this.headerPacket) {
143
+ return "ignored";
78
144
  }
79
- this.packets += 1;
80
- return this.packets < HEADER_PACKETS ? undefined : this.requestSegment(0);
145
+ return this.headerPacket + 1 === HEADER_PACKETS ? "complete" : "partial";
146
+ }
147
+ if (!isFrame(frame, DOWNLOAD_GROUP, DOWNLOAD_RAW) || byteAt(frame, FRAME_PACKET_INDEX) !== this.rawPacket) {
148
+ return "ignored";
81
149
  }
82
- if (!isExpectedRawPacket(frame, this.packets)) {
150
+ return this.rawPacket + 1 === PACKETS_PER_SEGMENT ? "complete" : "partial";
151
+ };
152
+ nextSettings = frame => {
153
+ if (!isFrame(frame, SETTINGS_GROUP, SETTINGS_COMMAND)) {
83
154
  return undefined;
84
155
  }
85
- this.packets += 1;
86
- this.recording.push(...frame.slice(PAYLOAD_FROM, PAYLOAD_FROM + PAYLOAD_BYTES));
87
- return this.packets < PACKETS_PER_SEGMENT ? undefined : this.finishSegment();
156
+ this.settings = [byteAt(frame, 5), byteAt(frame, 6), byteAt(frame, 7)];
157
+ this.phase = "mode";
158
+ return this.remember([setTimeCommand(this.params.write, this.params.clockSync, this.settings), packet(this.params.write, DOWNLOAD_GROUP, DOWNLOAD_MODE)], COMMAND_TIMEOUT_MS);
88
159
  };
89
- finishSegment = () => {
160
+ nextMode = frame => {
161
+ if (!isFrame(frame, DOWNLOAD_GROUP, DOWNLOAD_MODE)) {
162
+ return undefined;
163
+ }
164
+ const userOne = byteAt(frame, MODE_USER_ONE_COUNT_INDEX);
165
+ const userTwo = byteAt(frame, MODE_USER_TWO_COUNT_INDEX);
166
+ this.expectedRecords = userOne + userTwo;
167
+ if (this.expectedRecords === 0) {
168
+ this.phase = "done";
169
+ return undefined;
170
+ }
171
+ this.headers = [];
172
+ this.recordIndex = 0;
173
+ return this.requestHeader(this.recordIndex);
174
+ };
175
+ nextHeader = frame => {
176
+ if (!isFrame(frame, DOWNLOAD_GROUP, DOWNLOAD_HEADER) || byteAt(frame, FRAME_PACKET_INDEX) !== this.headerPacket) {
177
+ return undefined;
178
+ }
179
+ this.headerBytes.push(...payloadOf(frame));
180
+ this.headerPacket += 1;
181
+ if (this.headerPacket < HEADER_PACKETS) {
182
+ return undefined;
183
+ }
184
+ const header = parseVerovalEcgHeader(this.headerBytes);
185
+ if (header) {
186
+ this.headers.push(header);
187
+ }
188
+ this.recordIndex += 1;
189
+ if (this.recordIndex < this.expectedRecords) {
190
+ return this.requestHeader(this.recordIndex);
191
+ }
192
+ this.ecgHeaders = this.headers.filter(candidate => candidate.isEcg && !candidate.hasError && candidate.rawSize > 0);
193
+ this.headers.filter(candidate => !candidate.isEcg && !candidate.hasError).forEach(candidate => this.params.onRecord({
194
+ header: candidate
195
+ }));
196
+ if (this.ecgHeaders.length === 0) {
197
+ this.phase = "done";
198
+ return undefined;
199
+ }
200
+ this.ecgIndex = 0;
201
+ return this.remember([packet(this.params.write, DOWNLOAD_GROUP, DOWNLOAD_WAIT), ...this.requestRaw(this.ecgHeaders[0])], RAW_TIMEOUT_MS);
202
+ };
203
+ nextRaw = frame => {
204
+ if (!isFrame(frame, DOWNLOAD_GROUP, DOWNLOAD_RAW) || byteAt(frame, FRAME_PACKET_INDEX) !== this.rawPacket) {
205
+ return undefined;
206
+ }
207
+ this.segmentBytes.push(...payloadOf(frame));
208
+ this.rawPacket += 1;
209
+ if (this.rawPacket < PACKETS_PER_SEGMENT) {
210
+ return undefined;
211
+ }
212
+ this.rawBytes.push(...this.segmentBytes);
213
+ const header = this.ecgHeaders[this.ecgIndex];
214
+ if (!header) {
215
+ this.phase = "done";
216
+ return undefined;
217
+ }
218
+ if (this.rawBytes.length >= header.rawSize) {
219
+ this.params.onRecord({
220
+ header,
221
+ raw: this.rawBytes.slice(0, header.rawSize)
222
+ });
223
+ this.ecgIndex += 1;
224
+ if (this.ecgIndex >= this.ecgHeaders.length) {
225
+ this.phase = "done";
226
+ return undefined;
227
+ }
228
+ return this.remember(this.requestRaw(this.ecgHeaders[this.ecgIndex]), RAW_TIMEOUT_MS);
229
+ }
90
230
  this.segment += 1;
91
- if (this.segment < SEGMENTS) {
92
- return this.requestSegment(this.segment);
231
+ return this.remember(this.requestSegment(header), RAW_TIMEOUT_MS);
232
+ };
233
+ requestMode = () => this.remember([packet(this.params.write, DOWNLOAD_GROUP, DOWNLOAD_MODE)], COMMAND_TIMEOUT_MS);
234
+ requestHeader = index => {
235
+ this.phase = "header";
236
+ this.headerPacket = 0;
237
+ this.headerBytes = [];
238
+ return this.remember([packet(this.params.write, DOWNLOAD_GROUP, DOWNLOAD_HEADER, [index])], COMMAND_TIMEOUT_MS);
239
+ };
240
+ requestRaw = header => {
241
+ if (!header) {
242
+ this.phase = "done";
243
+ return [];
93
244
  }
94
- this.phase = "done";
95
- this.params.onRecording(this.recording);
96
- return undefined;
245
+ this.segment = 1;
246
+ this.rawBytes = [];
247
+ return this.requestSegment(header);
97
248
  };
98
- requestSegment = segment => {
249
+ requestSegment = header => {
99
250
  this.phase = "raw";
100
- this.packets = 0;
101
- this.segment = segment;
102
- return [packet(this.params.write, DOWNLOAD_RAW, segmentParameters(segment))];
251
+ this.rawPacket = 0;
252
+ this.segmentBytes = [];
253
+ return [packet(this.params.write, DOWNLOAD_GROUP, DOWNLOAD_RAW, [header.memorySlot - 1, header.sequence, this.segment])];
254
+ };
255
+ remember = (commands, timeout, preserveRetryCount = false) => {
256
+ const last = commands[commands.length - 1];
257
+ this.lastCommand = last;
258
+ this.pendingTimeout = timeout;
259
+ if (!preserveRetryCount) {
260
+ this.retries = 0;
261
+ }
262
+ return commands;
103
263
  };
104
264
  }
265
+ export { COMMAND_TIMEOUT_MS, DOWNLOAD_HEADER, DOWNLOAD_MODE, DOWNLOAD_RAW, DOWNLOAD_WAIT, HEADER_PACKETS, PACKETS_PER_SEGMENT, RAW_TIMEOUT_MS, SEGMENT_BYTES, SET_TIME_DELAY_MS, VerovalEcgTransfer };
105
266
  //# sourceMappingURL=veroval.ecg-transfer.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["PACKET_BYTES","GROUP_INDEX","COMMAND_INDEX","PARAMETER_INDEX","DOWNLOAD_GROUP","DOWNLOAD_MODE","DOWNLOAD_HEADER","DOWNLOAD_RAW","FRAME_GROUP_INDEX","FRAME_COMMAND_INDEX","FRAME_PACKET_INDEX","PAYLOAD_FROM","PAYLOAD_BYTES","HEADER_PACKETS","PACKETS_PER_SEGMENT","SEGMENTS","BYTE_MASK","BYTE_BITS","toHex","byte","toString","padStart","isDownloadFrame","frame","command","toLowerCase","isExpectedRawPacket","packetIndex","packet","write","parameters","bytes","Array","fill","forEach","value","index","map","withoutResponse","segmentParameters","segment","VerovalEcgTransfer","phase","packets","recording","constructor","params","initialCommands","nextCommand","undefined","requestSegment","push","slice","finishSegment","onRecording"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.ecg-transfer.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getClockParts","isClockSyncEnabled","hexToByte","parseVerovalEcgHeader","PACKET_BYTES","GROUP_INDEX","COMMAND_INDEX","PARAMETER_INDEX","DOWNLOAD_GROUP","DOWNLOAD_WAIT","DOWNLOAD_MODE","DOWNLOAD_HEADER","DOWNLOAD_RAW","SETTINGS_GROUP","SET_TIME_GROUP","SETTINGS_COMMAND","FRAME_GROUP_INDEX","FRAME_COMMAND_INDEX","FRAME_PACKET_INDEX","MODE_USER_ONE_COUNT_INDEX","MODE_USER_TWO_COUNT_INDEX","PAYLOAD_FROM","PAYLOAD_BYTES","HEADER_PACKETS","PACKETS_PER_SEGMENT","SEGMENT_BYTES","COMMAND_TIMEOUT_MS","RAW_TIMEOUT_MS","MAX_RETRIES","SET_TIME_DELAY_MS","BYTE_MASK","byteAt","frame","index","value","Number","isFinite","toHex","byte","toString","padStart","isFrame","group","command","packet","write","parameters","delayBeforeWriteMs","bytes","Array","fill","forEach","map","withoutResponse","undefined","payloadOf","slice","settingsCommand","setTimeCommand","clockSync","settings","parts","now","Date","timezone","year","month","day","hours","minutes","seconds","VerovalEcgTransfer","headerPacket","headerBytes","recordIndex","expectedRecords","headers","ecgHeaders","ecgIndex","segment","rawPacket","segmentBytes","rawBytes","pendingTimeout","retries","constructor","params","phase","initialCommands","remember","requestMode","nextCommand","nextSettings","nextMode","nextHeader","nextRaw","commandTimeoutMs","onCommandTimeout","lastCommand","terminal","commands","commandProgress","userOne","userTwo","requestHeader","push","header","filter","candidate","isEcg","hasError","rawSize","onRecord","length","requestRaw","raw","requestSegment","memorySlot","sequence","timeout","preserveRetryCount","last"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.ecg-transfer.ts"],"mappings":"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","ignoreList":[]}
@@ -28,8 +28,9 @@ const RT_DATA = 0x08;
28
28
  */
29
29
  const CASE_SELECTOR_BYTES = [1, 7];
30
30
 
31
- /** Header, realtime state, and the result struct through its pulse-rate field. */
32
- const MIN_LENGTH_BYTES = 28;
31
+ /** Header, realtime state, the result struct and its result code. */
32
+ const MIN_LENGTH_BYTES = 29;
33
+ const RESULT_CODE_INDEX = 28;
33
34
  const READING = [{
34
35
  name: "systolic",
35
36
  byteIndexes: [20, 21],
@@ -61,6 +62,13 @@ const measuring = (selector, description) => ({
61
62
  kind: "stream",
62
63
  description
63
64
  });
65
+ const rejectFailedResult = (reading, frame) => {
66
+ const resultCode = Number.parseInt(frame?.[RESULT_CODE_INDEX] ?? "00", 16);
67
+ if (resultCode !== 0) {
68
+ throw new Error(`Viatom blood-pressure measurement failed with result code 0x${resultCode.toString(16).padStart(2, "0")}`);
69
+ }
70
+ return reading;
71
+ };
64
72
 
65
73
  /**
66
74
  * The states the series reports, and what each means for a reading.
@@ -70,7 +78,11 @@ const measuring = (selector, description) => ({
70
78
  * separates one measurement from the next, which is why the states in between are declared
71
79
  * rather than ignored.
72
80
  */
73
- const BP2_CASES = [measuring("0804", "Cuff inflating or deflating"), result("0805", "Measurement finished"), measuring("080f", "Averaging run: a measurement is in progress"), measuring("0810", "Averaging run: waiting between measurements"), result("0811", "Averaging run finished, carrying the same payload")];
81
+ const BP2_CASES = [...["00", "01", "02", "03", "0a", "14", "ff"].map(state => ({
82
+ selector: `08${state}`,
83
+ kind: "idle",
84
+ description: "Monitor is connected but not measuring"
85
+ })), measuring("0804", "Cuff inflating or deflating"), result("0805", "Measurement finished"), measuring("080f", "Averaging run: a measurement is in progress"), measuring("0810", "Averaging run: waiting between measurements"), result("0811", "Averaging run finished, carrying the same payload")];
74
86
  /**
75
87
  * Declares one monitor of the BP2 series.
76
88
  *
@@ -87,6 +99,7 @@ const viatomBpMonitor = (advertisedName, params) => lepuDevice({
87
99
  cases: BP2_CASES.map(each => ({
88
100
  ...each
89
101
  })),
102
+ decorateReading: rejectFailedResult,
90
103
  ...(params.expectedDeviceTypes ? {
91
104
  expectedDeviceTypes: params.expectedDeviceTypes
92
105
  } : {})
@@ -1 +1 @@
1
- {"version":3,"names":["MeasurementTypeKey","lepuNameMatch","lepuDevice","RT_DATA","CASE_SELECTOR_BYTES","MIN_LENGTH_BYTES","READING","name","byteIndexes","byteOrder","encoding","unit","result","selector","description","kind","measurementTypeKey","bloodPressure","fields","measuring","BP2_CASES","viatomBpMonitor","advertisedName","params","id","toLowerCase","replace","nameMatch","pollCommand","minLengthBytes","caseSelectorBytes","cases","map","each","expectedDeviceTypes","bp2aMonitor","bp2tMonitor","bp2wMonitor","BP3_MODEL_NAMES"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.bp-monitors.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,YAAY;AAK/C,SAASC,aAAa,QAAQ,4BAAyB;AACvD,SAASC,UAAU,QAAQ,4BAAyB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAMC,OAAO,GAAG,IAAI;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,mBAAmB,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;;AAElC;AACA,MAAMC,gBAAgB,GAAG,EAAE;AAE3B,MAAMC,OAA0B,GAAG,CACjC;EACEC,IAAI,EAAE,UAAU;EAChBC,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;EACrBC,SAAS,EAAE,QAAQ;EACnBC,QAAQ,EAAE,MAAM;EAChBC,IAAI,EAAE;AACR,CAAC,EACD;EACEJ,IAAI,EAAE,WAAW;EACjBC,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;EACrBC,SAAS,EAAE,QAAQ;EACnBC,QAAQ,EAAE,MAAM;EAChBC,IAAI,EAAE;AACR,CAAC,EACD;EACEJ,IAAI,EAAE,WAAW;EACjBC,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;EACrBC,SAAS,EAAE,QAAQ;EACnBC,QAAQ,EAAE,MAAM;EAChBC,IAAI,EAAE;AACR,CAAC,CACF;AAED,MAAMC,MAAM,GAAGA,CAACC,QAAgB,EAAEC,WAAmB,MAAsB;EACzED,QAAQ;EACRE,IAAI,EAAE,QAAQ;EACdC,kBAAkB,EAAEhB,kBAAkB,CAACiB,aAAa;EACpDC,MAAM,EAAE,CAAC,GAAGZ,OAAO,CAAC;EACpBQ;AACF,CAAC,CAAC;AAEF,MAAMK,SAAS,GAAGA,CAACN,QAAgB,EAAEC,WAAmB,MAAsB;EAC5ED,QAAQ;EACRE,IAAI,EAAE,QAAQ;EACdD;AACF,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMM,SAA2B,GAAG,CAClCD,SAAS,CAAC,MAAM,EAAE,6BAA6B,CAAC,EAChDP,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,EACtCO,SAAS,CAAC,MAAM,EAAE,6CAA6C,CAAC,EAChEA,SAAS,CAAC,MAAM,EAAE,6CAA6C,CAAC,EAChEP,MAAM,CAAC,MAAM,EAAE,mDAAmD,CAAC,CACpE;AAoBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMS,eAAe,GAAGA,CACtBC,cAAsB,EACtBC,MAAsB,KAEtBrB,UAAU,CAAC;EACTsB,EAAE,EAAED,MAAM,CAACC,EAAE,IAAI,UAAUF,cAAc,CAACG,WAAW,CAAC,CAAC,CAACC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE;EACrFC,SAAS,EAAEJ,MAAM,CAACI,SAAS,IAAI1B,aAAa,CAACqB,cAAc,CAAC;EAC5DM,WAAW,EAAEzB,OAAO;EACpB0B,cAAc,EAAExB,gBAAgB;EAChCyB,iBAAiB,EAAE1B,mBAAmB;EACtC2B,KAAK,EAAEX,SAAS,CAACY,GAAG,CAAEC,IAAI,KAAM;IAAE,GAAGA;EAAK,CAAC,CAAC,CAAC;EAC7C,IAAIV,MAAM,CAACW,mBAAmB,GAC1B;IAAEA,mBAAmB,EAAEX,MAAM,CAACW;EAAoB,CAAC,GACnD,CAAC,CAAC;AACR,CAAC,CAAC;;AAEJ;AACA,MAAMC,WAAW,GAAIZ,MAAsB,IACzCF,eAAe,CAAC,MAAM,EAAEE,MAAM,CAAC;;AAEjC;AACA,MAAMa,WAAW,GAAIb,MAAsB,IACzCF,eAAe,CAAC,MAAM,EAAEE,MAAM,CAAC;;AAEjC;AACA,MAAMc,WAAW,GAAId,MAAsB,IACzCF,eAAe,CAAC,MAAM,EAAEE,MAAM,CAAC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMe,eAAkC,GAAG,CACzC,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,CACP;AAED,SACEH,WAAW,EACXC,WAAW,EACXC,WAAW,EACXC,eAAe,EACfjB,eAAe","ignoreList":[]}
1
+ {"version":3,"names":["MeasurementTypeKey","lepuNameMatch","lepuDevice","RT_DATA","CASE_SELECTOR_BYTES","MIN_LENGTH_BYTES","RESULT_CODE_INDEX","READING","name","byteIndexes","byteOrder","encoding","unit","result","selector","description","kind","measurementTypeKey","bloodPressure","fields","measuring","rejectFailedResult","reading","frame","resultCode","Number","parseInt","Error","toString","padStart","BP2_CASES","map","state","viatomBpMonitor","advertisedName","params","id","toLowerCase","replace","nameMatch","pollCommand","minLengthBytes","caseSelectorBytes","cases","each","decorateReading","expectedDeviceTypes","bp2aMonitor","bp2tMonitor","bp2wMonitor","BP3_MODEL_NAMES"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.bp-monitors.ts"],"mappings":"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","ignoreList":[]}
@@ -35,7 +35,7 @@ const decodeViatomEcgRecording = content => {
35
35
  for (let index = waveStart; index + 1 < waveEnd; index += 2) {
36
36
  const raw = hexToByte(content[index] ?? "0") | hexToByte(content[index + 1] ?? "0") << 8;
37
37
  const signed = raw & 0x8000 ? raw - 0x10000 : raw;
38
- samples.push(signed * VIATOM_ECG_MILLIVOLTS_PER_COUNT);
38
+ samples.push(raw === 0x7fff ? 0 : signed * VIATOM_ECG_MILLIVOLTS_PER_COUNT);
39
39
  }
40
40
  const recordedSeconds = readUInt32LittleEndian(content, content.length - 20);
41
41
  return {
@@ -1 +1 @@
1
- {"version":3,"names":["hexToByte","VIATOM_ECG_SAMPLE_RATE_HZ","VIATOM_ECG_MILLIVOLTS_PER_COUNT","validDate","year","month","day","hour","minute","second","date","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","undefined","recordedAtFromViatomFileName","name","digits","match","length","Number","slice","readUInt32LittleEndian","bytes","from","decodeViatomEcgRecording","content","samples","duration","waveStart","waveEnd","index","raw","signed","push","recordedSeconds"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.ecg-files.ts"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,+BAA4B;AAEtD,MAAMC,yBAAyB,GAAG,GAAG;AACrC,MAAMC,+BAA+B,GAAG,QAAQ;AAEhD,MAAMC,SAAS,GAAGA,CAChBC,IAAY,EACZC,KAAa,EACbC,GAAW,EACXC,IAAY,EACZC,MAAc,EACdC,MAAc,KACO;EACrB,MAAMC,IAAI,GAAG,IAAIC,IAAI,CAACP,IAAI,EAAEC,KAAK,GAAG,CAAC,EAAEC,GAAG,EAAEC,IAAI,EAAEC,MAAM,EAAEC,MAAM,EAAE,CAAC,CAAC;EAEpE,OAAOC,IAAI,CAACE,WAAW,CAAC,CAAC,KAAKR,IAAI,IAChCM,IAAI,CAACG,QAAQ,CAAC,CAAC,KAAKR,KAAK,GAAG,CAAC,IAC7BK,IAAI,CAACI,OAAO,CAAC,CAAC,KAAKR,GAAG,IACtBI,IAAI,CAACK,QAAQ,CAAC,CAAC,KAAKR,IAAI,IACxBG,IAAI,CAACM,UAAU,CAAC,CAAC,KAAKR,MAAM,IAC5BE,IAAI,CAACO,UAAU,CAAC,CAAC,KAAKR,MAAM,GAC1BC,IAAI,GACJQ,SAAS;AACf,CAAC;;AAED;AACA,MAAMC,4BAA4B,GAAIC,IAAY,IAAuB;EACvE,MAAMC,MAAM,GAAGD,IAAI,CAACE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;EAE/C,IAAI,CAACD,MAAM,EAAE;IACX,OAAOH,SAAS;EAClB;EAEA,IAAIG,MAAM,CAACE,MAAM,KAAK,EAAE,EAAE;IACxB,OAAOpB,SAAS,CACdqB,MAAM,CAACH,MAAM,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC1BD,MAAM,CAACH,MAAM,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC1BD,MAAM,CAACH,MAAM,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC1BD,MAAM,CAACH,MAAM,CAACI,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAC3BD,MAAM,CAACH,MAAM,CAACI,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAC5BD,MAAM,CAACH,MAAM,CAACI,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAC7B,CAAC;EACH;EAEA,OAAOtB,SAAS,CACd,IAAI,GAAGqB,MAAM,CAACH,MAAM,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACjCD,MAAM,CAACH,MAAM,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC1BD,MAAM,CAACH,MAAM,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC1BD,MAAM,CAACH,MAAM,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC1BD,MAAM,CAACH,MAAM,CAACI,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAC3BD,MAAM,CAACH,MAAM,CAACI,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAC7B,CAAC;AACH,CAAC;AAED,MAAMC,sBAAsB,GAAGA,CAACC,KAAwB,EAAEC,IAAY,KACpE5B,SAAS,CAAC2B,KAAK,CAACC,IAAI,CAAC,IAAI,GAAG,CAAC,GAC5B5B,SAAS,CAAC2B,KAAK,CAACC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAE,GACvC5B,SAAS,CAAC2B,KAAK,CAACC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAG,GACxC5B,SAAS,CAAC2B,KAAK,CAACC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAG;;AAE3C;AACA,MAAMC,wBAAwB,GAC5BC,OAA0B,IACkB;EAC5C,IAAIA,OAAO,CAACP,MAAM,IAAI,EAAE,EAAE;IACxB,OAAO;MAAEQ,OAAO,EAAE,EAAE;MAAEC,QAAQ,EAAE;IAAE,CAAC;EACrC;EAEA,MAAMC,SAAS,GAAG,EAAE;EACpB,MAAMC,OAAO,GAAGJ,OAAO,CAACP,MAAM,GAAG,EAAE;EACnC,MAAMQ,OAAiB,GAAG,EAAE;EAE5B,KAAK,IAAII,KAAK,GAAGF,SAAS,EAAEE,KAAK,GAAG,CAAC,GAAGD,OAAO,EAAEC,KAAK,IAAI,CAAC,EAAE;IAC3D,MAAMC,GAAG,GACPpC,SAAS,CAAC8B,OAAO,CAACK,KAAK,CAAC,IAAI,GAAG,CAAC,GAC/BnC,SAAS,CAAC8B,OAAO,CAACK,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAE;IAE7C,MAAME,MAAM,GAAGD,GAAG,GAAG,MAAM,GAAGA,GAAG,GAAG,OAAO,GAAGA,GAAG;IAEjDL,OAAO,CAACO,IAAI,CAACD,MAAM,GAAGnC,+BAA+B,CAAC;EACxD;EAEA,MAAMqC,eAAe,GAAGb,sBAAsB,CAACI,OAAO,EAAEA,OAAO,CAACP,MAAM,GAAG,EAAE,CAAC;EAE5E,OAAO;IACLQ,OAAO;IACPC,QAAQ,EAAEO,eAAe,IAAIR,OAAO,CAACR,MAAM,GAAGtB;EAChD,CAAC;AACH,CAAC;AAED,SACE4B,wBAAwB,EACxBV,4BAA4B,EAC5BjB,+BAA+B,EAC/BD,yBAAyB","ignoreList":[]}
1
+ {"version":3,"names":["hexToByte","VIATOM_ECG_SAMPLE_RATE_HZ","VIATOM_ECG_MILLIVOLTS_PER_COUNT","validDate","year","month","day","hour","minute","second","date","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","undefined","recordedAtFromViatomFileName","name","digits","match","length","Number","slice","readUInt32LittleEndian","bytes","from","decodeViatomEcgRecording","content","samples","duration","waveStart","waveEnd","index","raw","signed","push","recordedSeconds"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.ecg-files.ts"],"mappings":"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","ignoreList":[]}
@@ -52,6 +52,7 @@ const declareRecorder = (advertisedName, profile, params) => lepuDevice({
52
52
  id: params.id ?? `viatom-${advertisedName.toLowerCase().replace(/[^a-z0-9]+/g, "-")}`,
53
53
  nameMatch: params.nameMatch ?? lepuNameMatch(advertisedName),
54
54
  transport: profile.transport,
55
+ clockSync: "supported",
55
56
  pollCommand: profile.pollCommand,
56
57
  minLengthBytes: profile.heartRateBytes[1] + 1,
57
58
  caseSelectorBytes: [1],
@@ -71,7 +72,10 @@ const declareRecorder = (advertisedName, profile, params) => lepuDevice({
71
72
  ...(params.expectedDeviceTypes ? {
72
73
  expectedDeviceTypes: params.expectedDeviceTypes
73
74
  } : {}),
74
- fileTransfer: "ecg"
75
+ fileTransfer: "ecg",
76
+ ...(RAW_ECG_MODEL_NAMES.has(advertisedName) ? {
77
+ ecgFileDecoder: "raw-int16"
78
+ } : {})
75
79
  });
76
80
 
77
81
  /** The ER1, and the handheld recorders sold under other names on the same protocol. */
@@ -106,6 +110,9 @@ const ER1_MODEL_NAMES = ["ER1", "ER1-H", "ER1-L", "ER1-S", "ER1-SP", "ER1-W", "E
106
110
  /** The names the ER2 recorders advertise, all of them on the small-MTU link. */
107
111
  const ER2_MODEL_NAMES = ["ER2", "ER2-S", "HHM2", "HHM3", "LP ER2"];
108
112
 
113
+ /** These are the only Viatom recorders whose stored waveform is verified raw int16. */
114
+ const RAW_ECG_MODEL_NAMES = new Set(["ER1-L", "ER1-S", "ER1-W"]);
115
+
109
116
  /** The ER3 is identified separately from the ER1/ER2 opcode family. */
110
117
  const ER3_MODEL_NAMES = ["ER3"];
111
118
  export { er1Recorder, ER1_MODEL_NAMES, er2Recorder, ER2_MODEL_NAMES, ER3_MODEL_NAMES, er3Recorder };
@@ -1 +1 @@
1
- {"version":3,"names":["MeasurementTypeKey","lepuNameMatch","lepuDevice","RT_DATA","ER3_RT_DATA","HEART_RATE_UNIT","ER_HEART_RATE_BYTES","declareRecorder","advertisedName","profile","params","id","toLowerCase","replace","nameMatch","transport","pollCommand","minLengthBytes","heartRateBytes","caseSelectorBytes","cases","selector","toString","padStart","kind","measurementTypeKey","heartRate","description","fields","name","byteIndexes","byteOrder","encoding","unit","expectedDeviceTypes","fileTransfer","er1Recorder","er2Recorder","er3Recorder","ER1_MODEL_NAMES","ER2_MODEL_NAMES","ER3_MODEL_NAMES"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.ecg-recorders.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["MeasurementTypeKey","lepuNameMatch","lepuDevice","RT_DATA","ER3_RT_DATA","HEART_RATE_UNIT","ER_HEART_RATE_BYTES","declareRecorder","advertisedName","profile","params","id","toLowerCase","replace","nameMatch","transport","clockSync","pollCommand","minLengthBytes","heartRateBytes","caseSelectorBytes","cases","selector","toString","padStart","kind","measurementTypeKey","heartRate","description","fields","name","byteIndexes","byteOrder","encoding","unit","expectedDeviceTypes","fileTransfer","RAW_ECG_MODEL_NAMES","has","ecgFileDecoder","er1Recorder","er2Recorder","er3Recorder","ER1_MODEL_NAMES","ER2_MODEL_NAMES","Set","ER3_MODEL_NAMES"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.ecg-recorders.ts"],"mappings":"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","ignoreList":[]}
@@ -91,6 +91,7 @@ const lepodMonitor = (advertisedName, params) => lepuDevice({
91
91
  id: params.id ?? `viatom-${advertisedName.toLowerCase().replace(/[^a-z0-9]+/g, "-")}`,
92
92
  nameMatch: params.nameMatch ?? lepuNameMatch(advertisedName),
93
93
  fileTransfer: "ecg",
94
+ clockSync: "supported",
94
95
  pollCommand: RT_DATA,
95
96
  minLengthBytes: MIN_LENGTH_BYTES,
96
97
  caseSelectorBytes: [1],
@@ -1 +1 @@
1
- {"version":3,"names":["MeasurementTypeKey","lepuNameMatch","lepuDevice","RT_DATA","MIN_LENGTH_BYTES","HEART_RATE","RESPIRATION_RATE","BLOOD_OXYGEN","PULSE_RATE","PERFUSION_INDEX","TEMPERATURE","PERFUSION_SCALE","TEMPERATURE_SCALE","littleEndian","name","byteIndexes","unit","byteOrder","encoding","LEPOD_MEASUREMENTS","measurementTypeKey","bloodOxygenPulseRate","fields","scale","decimals","respiratoryRate","temperature","lepodMonitor","advertisedName","params","id","toLowerCase","replace","nameMatch","fileTransfer","pollCommand","minLengthBytes","caseSelectorBytes","cases","selector","kind","heartRate","description","additionalMeasurements","map","each","expectedDeviceTypes","LEPOD_MODEL_NAMES"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.lepod.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["MeasurementTypeKey","lepuNameMatch","lepuDevice","RT_DATA","MIN_LENGTH_BYTES","HEART_RATE","RESPIRATION_RATE","BLOOD_OXYGEN","PULSE_RATE","PERFUSION_INDEX","TEMPERATURE","PERFUSION_SCALE","TEMPERATURE_SCALE","littleEndian","name","byteIndexes","unit","byteOrder","encoding","LEPOD_MEASUREMENTS","measurementTypeKey","bloodOxygenPulseRate","fields","scale","decimals","respiratoryRate","temperature","lepodMonitor","advertisedName","params","id","toLowerCase","replace","nameMatch","fileTransfer","clockSync","pollCommand","minLengthBytes","caseSelectorBytes","cases","selector","kind","heartRate","description","additionalMeasurements","map","each","expectedDeviceTypes","LEPOD_MODEL_NAMES"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.lepod.ts"],"mappings":"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","ignoreList":[]}
@@ -27,6 +27,7 @@ export const clockSyncCapabilityForDevice = deviceName => {
27
27
  switch (deviceName) {
28
28
  case IntegratedDevices.BC01:
29
29
  case IntegratedDevices.MYSENSE:
30
+ case IntegratedDevices.VEROVAL_ECG:
30
31
  return "supported";
31
32
  case IntegratedDevices.VEROVAL_ACTIVITY:
32
33
  return "unsupported";
@@ -1 +1 @@
1
- {"version":3,"names":["IntegratedDevices","isClockSyncEnabled","options","enabled","getClockParts","date","timezone","year","getUTCFullYear","month","getUTCMonth","day","getUTCDate","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","clockSyncCapabilityForDevice","deviceName","BC01","MYSENSE","VEROVAL_ACTIVITY"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/clock-sync.ts"],"mappings":";;AAAA;;AAEA,SAASA,iBAAiB,QAAQ,yBAAsB;AAkBxD,OAAO,MAAMC,kBAAkB,GAAIC,OAA0B,IAC3DA,OAAO,EAAEC,OAAO,KAAK,KAAK;AAE5B,OAAO,MAAMC,aAAa,GAAGA,CAC3BC,IAAU,EACVC,QAA2B,GAAG,OAAO,KAErCA,QAAQ,KAAK,KAAK,GACd;EACEC,IAAI,EAAEF,IAAI,CAACG,cAAc,CAAC,CAAC;EAC3BC,KAAK,EAAEJ,IAAI,CAACK,WAAW,CAAC,CAAC,GAAG,CAAC;EAC7BC,GAAG,EAAEN,IAAI,CAACO,UAAU,CAAC,CAAC;EACtBC,KAAK,EAAER,IAAI,CAACS,WAAW,CAAC,CAAC;EACzBC,OAAO,EAAEV,IAAI,CAACW,aAAa,CAAC,CAAC;EAC7BC,OAAO,EAAEZ,IAAI,CAACa,aAAa,CAAC,CAAC;EAC7BC,YAAY,EAAEd,IAAI,CAACe,kBAAkB,CAAC;AACxC,CAAC,GACD;EACEb,IAAI,EAAEF,IAAI,CAACgB,WAAW,CAAC,CAAC;EACxBZ,KAAK,EAAEJ,IAAI,CAACiB,QAAQ,CAAC,CAAC,GAAG,CAAC;EAC1BX,GAAG,EAAEN,IAAI,CAACkB,OAAO,CAAC,CAAC;EACnBV,KAAK,EAAER,IAAI,CAACmB,QAAQ,CAAC,CAAC;EACtBT,OAAO,EAAEV,IAAI,CAACoB,UAAU,CAAC,CAAC;EAC1BR,OAAO,EAAEZ,IAAI,CAACqB,UAAU,CAAC,CAAC;EAC1BP,YAAY,EAAEd,IAAI,CAACsB,eAAe,CAAC;AACrC,CAAC;;AAEP;AACA,OAAO,MAAMC,4BAA4B,GACvCC,UAAkB,IACM;EACxB,QAAQA,UAAU;IAChB,KAAK7B,iBAAiB,CAAC8B,IAAI;IAC3B,KAAK9B,iBAAiB,CAAC+B,OAAO;MAC5B,OAAO,WAAW;IACpB,KAAK/B,iBAAiB,CAACgC,gBAAgB;MACrC,OAAO,aAAa;IACtB;MACE,OAAO,SAAS;EACpB;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["IntegratedDevices","isClockSyncEnabled","options","enabled","getClockParts","date","timezone","year","getUTCFullYear","month","getUTCMonth","day","getUTCDate","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","clockSyncCapabilityForDevice","deviceName","BC01","MYSENSE","VEROVAL_ECG","VEROVAL_ACTIVITY"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/clock-sync.ts"],"mappings":";;AAAA;;AAEA,SAASA,iBAAiB,QAAQ,yBAAsB;AAkBxD,OAAO,MAAMC,kBAAkB,GAAIC,OAA0B,IAC3DA,OAAO,EAAEC,OAAO,KAAK,KAAK;AAE5B,OAAO,MAAMC,aAAa,GAAGA,CAC3BC,IAAU,EACVC,QAA2B,GAAG,OAAO,KAErCA,QAAQ,KAAK,KAAK,GACd;EACEC,IAAI,EAAEF,IAAI,CAACG,cAAc,CAAC,CAAC;EAC3BC,KAAK,EAAEJ,IAAI,CAACK,WAAW,CAAC,CAAC,GAAG,CAAC;EAC7BC,GAAG,EAAEN,IAAI,CAACO,UAAU,CAAC,CAAC;EACtBC,KAAK,EAAER,IAAI,CAACS,WAAW,CAAC,CAAC;EACzBC,OAAO,EAAEV,IAAI,CAACW,aAAa,CAAC,CAAC;EAC7BC,OAAO,EAAEZ,IAAI,CAACa,aAAa,CAAC,CAAC;EAC7BC,YAAY,EAAEd,IAAI,CAACe,kBAAkB,CAAC;AACxC,CAAC,GACD;EACEb,IAAI,EAAEF,IAAI,CAACgB,WAAW,CAAC,CAAC;EACxBZ,KAAK,EAAEJ,IAAI,CAACiB,QAAQ,CAAC,CAAC,GAAG,CAAC;EAC1BX,GAAG,EAAEN,IAAI,CAACkB,OAAO,CAAC,CAAC;EACnBV,KAAK,EAAER,IAAI,CAACmB,QAAQ,CAAC,CAAC;EACtBT,OAAO,EAAEV,IAAI,CAACoB,UAAU,CAAC,CAAC;EAC1BR,OAAO,EAAEZ,IAAI,CAACqB,UAAU,CAAC,CAAC;EAC1BP,YAAY,EAAEd,IAAI,CAACsB,eAAe,CAAC;AACrC,CAAC;;AAEP;AACA,OAAO,MAAMC,4BAA4B,GACvCC,UAAkB,IACM;EACxB,QAAQA,UAAU;IAChB,KAAK7B,iBAAiB,CAAC8B,IAAI;IAC3B,KAAK9B,iBAAiB,CAAC+B,OAAO;IAC9B,KAAK/B,iBAAiB,CAACgC,WAAW;MAChC,OAAO,WAAW;IACpB,KAAKhC,iBAAiB,CAACiC,gBAAgB;MACrC,OAAO,aAAa;IACtB;MACE,OAAO,SAAS;EACpB;AACF,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["IntegratedDevices"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/device-measurement-map.ts"],"mappings":";;AAYA,SAASA,iBAAiB,QAAQ,yBAAsB;;AA4CxD;AACA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"names":["IntegratedDevices"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/device-measurement-map.ts"],"mappings":";;AAYA,SAASA,iBAAiB,QAAQ,yBAAsB;;AAgDxD;AACA;AACA;AACA","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ import { hexToByte } from "./hex-to-byte.js";
4
+ const CRC8_POLYNOMIAL = 0x8c;
5
+ const BITS_PER_BYTE = 8;
6
+ const BYTE_MASK = 0xff;
7
+
8
+ /** CRC-8/MAXIM (Dallas/1-Wire), initial value 0x00. */
9
+ export const calculateCrc8Maxim = (hex, byteCount) => {
10
+ let remainder = 0;
11
+ for (let index = 0; index < byteCount; index++) {
12
+ remainder ^= hexToByte(hex[index] || "0");
13
+ for (let bit = 0; bit < BITS_PER_BYTE; bit++) {
14
+ remainder = remainder & 1 ? remainder >> 1 ^ CRC8_POLYNOMIAL : remainder >> 1;
15
+ }
16
+ }
17
+ return remainder & BYTE_MASK;
18
+ };
19
+ //# sourceMappingURL=calculate-crc-8-maxim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["hexToByte","CRC8_POLYNOMIAL","BITS_PER_BYTE","BYTE_MASK","calculateCrc8Maxim","hex","byteCount","remainder","index","bit"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/utils/calculate-crc-8-maxim.ts"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,kBAAe;AAEzC,MAAMC,eAAe,GAAG,IAAI;AAC5B,MAAMC,aAAa,GAAG,CAAC;AACvB,MAAMC,SAAS,GAAG,IAAI;;AAEtB;AACA,OAAO,MAAMC,kBAAkB,GAAGA,CAChCC,GAAsB,EACtBC,SAAiB,KACN;EACX,IAAIC,SAAS,GAAG,CAAC;EAEjB,KAAK,IAAIC,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGF,SAAS,EAAEE,KAAK,EAAE,EAAE;IAC9CD,SAAS,IAAIP,SAAS,CAACK,GAAG,CAACG,KAAK,CAAC,IAAI,GAAG,CAAC;IAEzC,KAAK,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGP,aAAa,EAAEO,GAAG,EAAE,EAAE;MAC5CF,SAAS,GACPA,SAAS,GAAG,CAAC,GACRA,SAAS,IAAI,CAAC,GAAIN,eAAe,GAClCM,SAAS,IAAI,CAAC;IACtB;EACF;EAEA,OAAOA,SAAS,GAAGJ,SAAS;AAC9B,CAAC","ignoreList":[]}