@ovok/native 0.4.6 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (520) hide show
  1. package/lib/commonjs/modules/bt-device/constants/device-instruction-pdfs.js +3 -1
  2. package/lib/commonjs/modules/bt-device/constants/device-instruction-pdfs.js.map +1 -1
  3. package/lib/commonjs/modules/bt-management/constants/integrated-devices-map.js +1 -1
  4. package/lib/commonjs/modules/bt-management/constants/integrated-devices-map.js.map +1 -1
  5. package/lib/commonjs/modules/bt-management/index.js +220 -0
  6. package/lib/commonjs/modules/bt-management/index.js.map +1 -1
  7. package/lib/commonjs/modules/bt-management/services/custom/compile-case-fields.js +49 -0
  8. package/lib/commonjs/modules/bt-management/services/custom/compile-case-fields.js.map +1 -0
  9. package/lib/commonjs/modules/bt-management/services/custom/compile-case-shape.js +52 -0
  10. package/lib/commonjs/modules/bt-management/services/custom/compile-case-shape.js.map +1 -0
  11. package/lib/commonjs/modules/bt-management/services/custom/compile-custom-case.js +53 -41
  12. package/lib/commonjs/modules/bt-management/services/custom/compile-custom-case.js.map +1 -1
  13. package/lib/commonjs/modules/bt-management/services/custom/compile-custom-field.js +3 -0
  14. package/lib/commonjs/modules/bt-management/services/custom/compile-custom-field.js.map +1 -1
  15. package/lib/commonjs/modules/bt-management/services/custom/compile-custom-frame.js +48 -2
  16. package/lib/commonjs/modules/bt-management/services/custom/compile-custom-frame.js.map +1 -1
  17. package/lib/commonjs/modules/bt-management/services/custom/compile-custom-lepu.js +98 -0
  18. package/lib/commonjs/modules/bt-management/services/custom/compile-custom-lepu.js.map +1 -0
  19. package/lib/commonjs/modules/bt-management/services/custom/define-custom-device.js +24 -1
  20. package/lib/commonjs/modules/bt-management/services/custom/define-custom-device.js.map +1 -1
  21. package/lib/commonjs/modules/bt-management/services/device-creator.js +19 -8
  22. package/lib/commonjs/modules/bt-management/services/device-creator.js.map +1 -1
  23. package/lib/commonjs/modules/bt-management/services/devices/aoj/aoj.thermometers.js +85 -0
  24. package/lib/commonjs/modules/bt-management/services/devices/aoj/aoj.thermometers.js.map +1 -0
  25. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.frame-reader.js +8 -74
  26. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.frame-reader.js.map +1 -1
  27. package/lib/commonjs/modules/bt-management/services/devices/bt-command-writer.js +155 -0
  28. package/lib/commonjs/modules/bt-management/services/devices/bt-command-writer.js.map +1 -0
  29. package/lib/commonjs/modules/bt-management/services/devices/bt-connection-handler.js +9 -49
  30. package/lib/commonjs/modules/bt-management/services/devices/bt-connection-handler.js.map +1 -1
  31. package/lib/commonjs/modules/bt-management/services/devices/bt-data-processor.js +17 -6
  32. package/lib/commonjs/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
  33. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js +21 -14
  34. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  35. package/lib/commonjs/modules/bt-management/services/devices/custom/custom-lepu-sequencer.js +55 -0
  36. package/lib/commonjs/modules/bt-management/services/devices/custom/custom-lepu-sequencer.js.map +1 -0
  37. package/lib/commonjs/modules/bt-management/services/devices/custom/custom.device.js +82 -29
  38. package/lib/commonjs/modules/bt-management/services/devices/custom/custom.device.js.map +1 -1
  39. package/lib/commonjs/modules/bt-management/services/devices/frame-parser.js +2 -1
  40. package/lib/commonjs/modules/bt-management/services/devices/frame-parser.js.map +1 -1
  41. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.command-builder.js +48 -0
  42. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.command-builder.js.map +1 -0
  43. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.commands.js +37 -0
  44. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.commands.js.map +1 -0
  45. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.device-info.js +83 -0
  46. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.device-info.js.map +1 -0
  47. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.device-names.js +26 -0
  48. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.device-names.js.map +1 -0
  49. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.file-names.js +36 -0
  50. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.file-names.js.map +1 -0
  51. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.file-transfer.js +155 -0
  52. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.file-transfer.js.map +1 -0
  53. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.frame-reader.js +98 -0
  54. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.frame-reader.js.map +1 -0
  55. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.frame.js +29 -0
  56. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.frame.js.map +1 -0
  57. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.identity-gate.js +103 -0
  58. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.identity-gate.js.map +1 -0
  59. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.name-match.js +32 -0
  60. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.name-match.js.map +1 -0
  61. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.response-type.js +64 -0
  62. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.response-type.js.map +1 -0
  63. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.transports.js +143 -0
  64. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.transports.js.map +1 -0
  65. package/lib/commonjs/modules/bt-management/services/devices/polling-command-sequencer.js +38 -0
  66. package/lib/commonjs/modules/bt-management/services/devices/polling-command-sequencer.js.map +1 -0
  67. package/lib/commonjs/modules/bt-management/services/devices/sentinel-frame-reader.js +84 -0
  68. package/lib/commonjs/modules/bt-management/services/devices/sentinel-frame-reader.js.map +1 -0
  69. package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js +130 -0
  70. package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js.map +1 -0
  71. package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js +55 -0
  72. package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js.map +1 -0
  73. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.bp-monitors.js +43 -0
  74. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.bp-monitors.js.map +1 -0
  75. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.duo-control-device.js +113 -0
  76. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.duo-control-device.js.map +1 -0
  77. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.js +120 -0
  78. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.js.map +1 -0
  79. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-device.js +92 -0
  80. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-device.js.map +1 -0
  81. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-samples.js +64 -0
  82. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-samples.js.map +1 -0
  83. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js +94 -0
  84. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js.map +1 -0
  85. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js +124 -0
  86. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js.map +1 -0
  87. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.js +113 -0
  88. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.js.map +1 -0
  89. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.lepod.js +117 -0
  90. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.lepod.js.map +1 -0
  91. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.oximeters.js +82 -0
  92. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.oximeters.js.map +1 -0
  93. package/lib/commonjs/modules/bt-management/types/command-sequencer.js +6 -0
  94. package/lib/commonjs/modules/bt-management/types/command-sequencer.js.map +1 -0
  95. package/lib/commonjs/modules/bt-management/types/custom-checksum-algorithm.js +2 -0
  96. package/lib/commonjs/modules/bt-management/types/custom-checksum-algorithm.js.map +1 -0
  97. package/lib/commonjs/modules/bt-management/types/custom-checksum-spec.js +6 -0
  98. package/lib/commonjs/modules/bt-management/types/custom-checksum-spec.js.map +1 -0
  99. package/lib/commonjs/modules/bt-management/types/custom-lepu-spec.js +2 -0
  100. package/lib/commonjs/modules/bt-management/types/custom-lepu-spec.js.map +1 -0
  101. package/lib/commonjs/modules/bt-management/types/custom-measurement-spec.js +6 -0
  102. package/lib/commonjs/modules/bt-management/types/custom-measurement-spec.js.map +1 -0
  103. package/lib/commonjs/modules/bt-management/types/device-command.js +2 -0
  104. package/lib/commonjs/modules/bt-management/types/device-command.js.map +1 -0
  105. package/lib/commonjs/modules/bt-management/types/integrated-devices.js +2 -0
  106. package/lib/commonjs/modules/bt-management/types/integrated-devices.js.map +1 -1
  107. package/lib/commonjs/modules/bt-management/types/measurement-group.js +6 -0
  108. package/lib/commonjs/modules/bt-management/types/measurement-group.js.map +1 -0
  109. package/lib/commonjs/modules/bt-management/utils/calculate-checksum.js +49 -0
  110. package/lib/commonjs/modules/bt-management/utils/calculate-checksum.js.map +1 -0
  111. package/lib/commonjs/modules/bt-management/utils/create-custom-field-parser.js +21 -0
  112. package/lib/commonjs/modules/bt-management/utils/create-custom-field-parser.js.map +1 -1
  113. package/lib/commonjs/modules/bt-management/utils/create-frame-validator.js +9 -0
  114. package/lib/commonjs/modules/bt-management/utils/create-frame-validator.js.map +1 -1
  115. package/lib/commonjs/modules/bt-management/utils/hex-to-bytes.js +19 -0
  116. package/lib/commonjs/modules/bt-management/utils/hex-to-bytes.js.map +1 -0
  117. package/lib/commonjs/modules/bt-management/utils/le-32-to-bytes.js +13 -0
  118. package/lib/commonjs/modules/bt-management/utils/le-32-to-bytes.js.map +1 -0
  119. package/lib/commonjs/modules/bt-management/utils/parse-measurement.js +10 -7
  120. package/lib/commonjs/modules/bt-management/utils/parse-measurement.js.map +1 -1
  121. package/lib/commonjs/modules/bt-management/utils/reject-custom-reading.js +34 -0
  122. package/lib/commonjs/modules/bt-management/utils/reject-custom-reading.js.map +1 -0
  123. package/lib/commonjs/modules/bt-management/utils/summarise-measurement-for-log.js +22 -0
  124. package/lib/commonjs/modules/bt-management/utils/summarise-measurement-for-log.js.map +1 -0
  125. package/lib/commonjs/modules/bt-management/utils/supported-measurement-type-keys.js +18 -0
  126. package/lib/commonjs/modules/bt-management/utils/supported-measurement-type-keys.js.map +1 -0
  127. package/lib/module/modules/bt-device/constants/device-instruction-pdfs.js +3 -1
  128. package/lib/module/modules/bt-device/constants/device-instruction-pdfs.js.map +1 -1
  129. package/lib/module/modules/bt-management/constants/integrated-devices-map.js +1 -1
  130. package/lib/module/modules/bt-management/constants/integrated-devices-map.js.map +1 -1
  131. package/lib/module/modules/bt-management/index.js +20 -0
  132. package/lib/module/modules/bt-management/index.js.map +1 -1
  133. package/lib/module/modules/bt-management/services/custom/compile-case-fields.js +44 -0
  134. package/lib/module/modules/bt-management/services/custom/compile-case-fields.js.map +1 -0
  135. package/lib/module/modules/bt-management/services/custom/compile-case-shape.js +48 -0
  136. package/lib/module/modules/bt-management/services/custom/compile-case-shape.js.map +1 -0
  137. package/lib/module/modules/bt-management/services/custom/compile-custom-case.js +53 -41
  138. package/lib/module/modules/bt-management/services/custom/compile-custom-case.js.map +1 -1
  139. package/lib/module/modules/bt-management/services/custom/compile-custom-field.js +3 -0
  140. package/lib/module/modules/bt-management/services/custom/compile-custom-field.js.map +1 -1
  141. package/lib/module/modules/bt-management/services/custom/compile-custom-frame.js +48 -2
  142. package/lib/module/modules/bt-management/services/custom/compile-custom-frame.js.map +1 -1
  143. package/lib/module/modules/bt-management/services/custom/compile-custom-lepu.js +93 -0
  144. package/lib/module/modules/bt-management/services/custom/compile-custom-lepu.js.map +1 -0
  145. package/lib/module/modules/bt-management/services/custom/define-custom-device.js +24 -1
  146. package/lib/module/modules/bt-management/services/custom/define-custom-device.js.map +1 -1
  147. package/lib/module/modules/bt-management/services/device-creator.js +20 -8
  148. package/lib/module/modules/bt-management/services/device-creator.js.map +1 -1
  149. package/lib/module/modules/bt-management/services/devices/aoj/aoj.thermometers.js +81 -0
  150. package/lib/module/modules/bt-management/services/devices/aoj/aoj.thermometers.js.map +1 -0
  151. package/lib/module/modules/bt-management/services/devices/bp2/bp2.frame-reader.js +8 -73
  152. package/lib/module/modules/bt-management/services/devices/bp2/bp2.frame-reader.js.map +1 -1
  153. package/lib/module/modules/bt-management/services/devices/bt-command-writer.js +150 -0
  154. package/lib/module/modules/bt-management/services/devices/bt-command-writer.js.map +1 -0
  155. package/lib/module/modules/bt-management/services/devices/bt-connection-handler.js +9 -49
  156. package/lib/module/modules/bt-management/services/devices/bt-connection-handler.js.map +1 -1
  157. package/lib/module/modules/bt-management/services/devices/bt-data-processor.js +17 -6
  158. package/lib/module/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
  159. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js +21 -14
  160. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  161. package/lib/module/modules/bt-management/services/devices/custom/custom-lepu-sequencer.js +51 -0
  162. package/lib/module/modules/bt-management/services/devices/custom/custom-lepu-sequencer.js.map +1 -0
  163. package/lib/module/modules/bt-management/services/devices/custom/custom.device.js +82 -29
  164. package/lib/module/modules/bt-management/services/devices/custom/custom.device.js.map +1 -1
  165. package/lib/module/modules/bt-management/services/devices/frame-parser.js +2 -1
  166. package/lib/module/modules/bt-management/services/devices/frame-parser.js.map +1 -1
  167. package/lib/module/modules/bt-management/services/devices/lepu/lepu.command-builder.js +43 -0
  168. package/lib/module/modules/bt-management/services/devices/lepu/lepu.command-builder.js.map +1 -0
  169. package/lib/module/modules/bt-management/services/devices/lepu/lepu.commands.js +33 -0
  170. package/lib/module/modules/bt-management/services/devices/lepu/lepu.commands.js.map +1 -0
  171. package/lib/module/modules/bt-management/services/devices/lepu/lepu.device-info.js +79 -0
  172. package/lib/module/modules/bt-management/services/devices/lepu/lepu.device-info.js.map +1 -0
  173. package/lib/module/modules/bt-management/services/devices/lepu/lepu.device-names.js +22 -0
  174. package/lib/module/modules/bt-management/services/devices/lepu/lepu.device-names.js.map +1 -0
  175. package/lib/module/modules/bt-management/services/devices/lepu/lepu.file-names.js +32 -0
  176. package/lib/module/modules/bt-management/services/devices/lepu/lepu.file-names.js.map +1 -0
  177. package/lib/module/modules/bt-management/services/devices/lepu/lepu.file-transfer.js +150 -0
  178. package/lib/module/modules/bt-management/services/devices/lepu/lepu.file-transfer.js.map +1 -0
  179. package/lib/module/modules/bt-management/services/devices/lepu/lepu.frame-reader.js +93 -0
  180. package/lib/module/modules/bt-management/services/devices/lepu/lepu.frame-reader.js.map +1 -0
  181. package/lib/module/modules/bt-management/services/devices/lepu/lepu.frame.js +24 -0
  182. package/lib/module/modules/bt-management/services/devices/lepu/lepu.frame.js.map +1 -0
  183. package/lib/module/modules/bt-management/services/devices/lepu/lepu.identity-gate.js +98 -0
  184. package/lib/module/modules/bt-management/services/devices/lepu/lepu.identity-gate.js.map +1 -0
  185. package/lib/module/modules/bt-management/services/devices/lepu/lepu.name-match.js +27 -0
  186. package/lib/module/modules/bt-management/services/devices/lepu/lepu.name-match.js.map +1 -0
  187. package/lib/module/modules/bt-management/services/devices/lepu/lepu.response-type.js +59 -0
  188. package/lib/module/modules/bt-management/services/devices/lepu/lepu.response-type.js.map +1 -0
  189. package/lib/module/modules/bt-management/services/devices/lepu/lepu.transports.js +140 -0
  190. package/lib/module/modules/bt-management/services/devices/lepu/lepu.transports.js.map +1 -0
  191. package/lib/module/modules/bt-management/services/devices/polling-command-sequencer.js +34 -0
  192. package/lib/module/modules/bt-management/services/devices/polling-command-sequencer.js.map +1 -0
  193. package/lib/module/modules/bt-management/services/devices/sentinel-frame-reader.js +79 -0
  194. package/lib/module/modules/bt-management/services/devices/sentinel-frame-reader.js.map +1 -0
  195. package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js +123 -0
  196. package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js.map +1 -0
  197. package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js +50 -0
  198. package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js.map +1 -0
  199. package/lib/module/modules/bt-management/services/devices/veroval/veroval.bp-monitors.js +38 -0
  200. package/lib/module/modules/bt-management/services/devices/veroval/veroval.bp-monitors.js.map +1 -0
  201. package/lib/module/modules/bt-management/services/devices/veroval/veroval.duo-control-device.js +108 -0
  202. package/lib/module/modules/bt-management/services/devices/veroval/veroval.duo-control-device.js.map +1 -0
  203. package/lib/module/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.js +116 -0
  204. package/lib/module/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.js.map +1 -0
  205. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-device.js +87 -0
  206. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-device.js.map +1 -0
  207. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-samples.js +60 -0
  208. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-samples.js.map +1 -0
  209. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js +89 -0
  210. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js.map +1 -0
  211. package/lib/module/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js +118 -0
  212. package/lib/module/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js.map +1 -0
  213. package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.js +108 -0
  214. package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.js.map +1 -0
  215. package/lib/module/modules/bt-management/services/devices/viatom/viatom.lepod.js +114 -0
  216. package/lib/module/modules/bt-management/services/devices/viatom/viatom.lepod.js.map +1 -0
  217. package/lib/module/modules/bt-management/services/devices/viatom/viatom.oximeters.js +79 -0
  218. package/lib/module/modules/bt-management/services/devices/viatom/viatom.oximeters.js.map +1 -0
  219. package/lib/module/modules/bt-management/types/command-sequencer.js +4 -0
  220. package/lib/module/modules/bt-management/types/command-sequencer.js.map +1 -0
  221. package/lib/module/modules/bt-management/types/custom-checksum-algorithm.js +2 -0
  222. package/lib/module/modules/bt-management/types/custom-checksum-algorithm.js.map +1 -0
  223. package/lib/module/modules/bt-management/types/custom-checksum-spec.js +4 -0
  224. package/lib/module/modules/bt-management/types/custom-checksum-spec.js.map +1 -0
  225. package/lib/module/modules/bt-management/types/custom-device-definition.js.map +1 -1
  226. package/lib/module/modules/bt-management/types/custom-lepu-spec.js +2 -0
  227. package/lib/module/modules/bt-management/types/custom-lepu-spec.js.map +1 -0
  228. package/lib/module/modules/bt-management/types/custom-measurement-spec.js +4 -0
  229. package/lib/module/modules/bt-management/types/custom-measurement-spec.js.map +1 -0
  230. package/lib/module/modules/bt-management/types/device-command.js +2 -0
  231. package/lib/module/modules/bt-management/types/device-command.js.map +1 -0
  232. package/lib/module/modules/bt-management/types/device-measurement-map.js +3 -3
  233. package/lib/module/modules/bt-management/types/device-measurement-map.js.map +1 -1
  234. package/lib/module/modules/bt-management/types/integrated-devices.js +2 -0
  235. package/lib/module/modules/bt-management/types/integrated-devices.js.map +1 -1
  236. package/lib/module/modules/bt-management/types/measurement-group.js +4 -0
  237. package/lib/module/modules/bt-management/types/measurement-group.js.map +1 -0
  238. package/lib/module/modules/bt-management/utils/calculate-checksum.js +44 -0
  239. package/lib/module/modules/bt-management/utils/calculate-checksum.js.map +1 -0
  240. package/lib/module/modules/bt-management/utils/create-custom-field-parser.js +21 -0
  241. package/lib/module/modules/bt-management/utils/create-custom-field-parser.js.map +1 -1
  242. package/lib/module/modules/bt-management/utils/create-frame-validator.js +9 -0
  243. package/lib/module/modules/bt-management/utils/create-frame-validator.js.map +1 -1
  244. package/lib/module/modules/bt-management/utils/hex-to-bytes.js +14 -0
  245. package/lib/module/modules/bt-management/utils/hex-to-bytes.js.map +1 -0
  246. package/lib/module/modules/bt-management/utils/le-32-to-bytes.js +8 -0
  247. package/lib/module/modules/bt-management/utils/le-32-to-bytes.js.map +1 -0
  248. package/lib/module/modules/bt-management/utils/parse-measurement.js +10 -7
  249. package/lib/module/modules/bt-management/utils/parse-measurement.js.map +1 -1
  250. package/lib/module/modules/bt-management/utils/reject-custom-reading.js +29 -0
  251. package/lib/module/modules/bt-management/utils/reject-custom-reading.js.map +1 -0
  252. package/lib/module/modules/bt-management/utils/summarise-measurement-for-log.js +17 -0
  253. package/lib/module/modules/bt-management/utils/summarise-measurement-for-log.js.map +1 -0
  254. package/lib/module/modules/bt-management/utils/supported-measurement-type-keys.js +13 -0
  255. package/lib/module/modules/bt-management/utils/supported-measurement-type-keys.js.map +1 -0
  256. package/lib/typescript/commonjs/src/modules/bt-device/constants/device-instruction-pdfs.d.ts.map +1 -1
  257. package/lib/typescript/commonjs/src/modules/bt-management/constants/integrated-devices-map.d.ts.map +1 -1
  258. package/lib/typescript/commonjs/src/modules/bt-management/index.d.ts +20 -0
  259. package/lib/typescript/commonjs/src/modules/bt-management/index.d.ts.map +1 -1
  260. package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-case-fields.d.ts +13 -0
  261. package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-case-fields.d.ts.map +1 -0
  262. package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-case-shape.d.ts +19 -0
  263. package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-case-shape.d.ts.map +1 -0
  264. package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-case.d.ts.map +1 -1
  265. package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-field.d.ts.map +1 -1
  266. package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-frame.d.ts.map +1 -1
  267. package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-lepu.d.ts +11 -0
  268. package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-lepu.d.ts.map +1 -0
  269. package/lib/typescript/commonjs/src/modules/bt-management/services/custom/define-custom-device.d.ts.map +1 -1
  270. package/lib/typescript/commonjs/src/modules/bt-management/services/device-creator.d.ts.map +1 -1
  271. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/aoj/aoj.thermometers.d.ts +24 -0
  272. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/aoj/aoj.thermometers.d.ts.map +1 -0
  273. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts +5 -8
  274. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts.map +1 -1
  275. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-command-writer.d.ts +74 -0
  276. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-command-writer.d.ts.map +1 -0
  277. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-connection-handler.d.ts +6 -4
  278. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-connection-handler.d.ts.map +1 -1
  279. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-data-processor.d.ts +20 -1
  280. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-data-processor.d.ts.map +1 -1
  281. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts +12 -1
  282. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  283. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom-lepu-sequencer.d.ts +30 -0
  284. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom-lepu-sequencer.d.ts.map +1 -0
  285. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom.device.d.ts +32 -2
  286. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom.device.d.ts.map +1 -1
  287. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/frame-parser.d.ts.map +1 -1
  288. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.command-builder.d.ts +24 -0
  289. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.command-builder.d.ts.map +1 -0
  290. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.commands.d.ts +32 -0
  291. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.commands.d.ts.map +1 -0
  292. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.device-info.d.ts +27 -0
  293. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.device-info.d.ts.map +1 -0
  294. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts +20 -0
  295. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts.map +1 -0
  296. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.file-names.d.ts +14 -0
  297. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.file-names.d.ts.map +1 -0
  298. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts +75 -0
  299. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts.map +1 -0
  300. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.frame-reader.d.ts +28 -0
  301. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.frame-reader.d.ts.map +1 -0
  302. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.frame.d.ts +12 -0
  303. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.frame.d.ts.map +1 -0
  304. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.identity-gate.d.ts +81 -0
  305. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.identity-gate.d.ts.map +1 -0
  306. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.name-match.d.ts +17 -0
  307. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.name-match.d.ts.map +1 -0
  308. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.response-type.d.ts +33 -0
  309. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.response-type.d.ts.map +1 -0
  310. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts +85 -0
  311. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts.map +1 -0
  312. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/polling-command-sequencer.d.ts +27 -0
  313. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/polling-command-sequencer.d.ts.map +1 -0
  314. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/sentinel-frame-reader.d.ts +52 -0
  315. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/sentinel-frame-reader.d.ts.map +1 -0
  316. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts +53 -0
  317. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts.map +1 -0
  318. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts +45 -0
  319. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts.map +1 -0
  320. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.bp-monitors.d.ts +18 -0
  321. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.bp-monitors.d.ts.map +1 -0
  322. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.duo-control-device.d.ts +19 -0
  323. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.duo-control-device.d.ts.map +1 -0
  324. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.d.ts +45 -0
  325. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.d.ts.map +1 -0
  326. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts +30 -0
  327. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts.map +1 -0
  328. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-samples.d.ts +39 -0
  329. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-samples.d.ts.map +1 -0
  330. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts +35 -0
  331. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts.map +1 -0
  332. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts +44 -0
  333. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts.map +1 -0
  334. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.d.ts +32 -0
  335. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.d.ts.map +1 -0
  336. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.lepod.d.ts +25 -0
  337. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.lepod.d.ts.map +1 -0
  338. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.oximeters.d.ts +39 -0
  339. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.oximeters.d.ts.map +1 -0
  340. package/lib/typescript/commonjs/src/modules/bt-management/types/command-sequencer.d.ts +26 -0
  341. package/lib/typescript/commonjs/src/modules/bt-management/types/command-sequencer.d.ts.map +1 -0
  342. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-case-spec.d.ts +43 -0
  343. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-case-spec.d.ts.map +1 -1
  344. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-checksum-algorithm.d.ts +10 -0
  345. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-checksum-algorithm.d.ts.map +1 -0
  346. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-checksum-spec.d.ts +23 -0
  347. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-checksum-spec.d.ts.map +1 -0
  348. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-device-definition.d.ts +5 -0
  349. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-device-definition.d.ts.map +1 -1
  350. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-device-spec.d.ts +12 -0
  351. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-device-spec.d.ts.map +1 -1
  352. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-field-encoding.d.ts +7 -1
  353. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-field-encoding.d.ts.map +1 -1
  354. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-frame-spec.d.ts +8 -0
  355. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-frame-spec.d.ts.map +1 -1
  356. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-lepu-spec.d.ts +44 -0
  357. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-lepu-spec.d.ts.map +1 -0
  358. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-measurement-spec.d.ts +9 -0
  359. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-measurement-spec.d.ts.map +1 -0
  360. package/lib/typescript/commonjs/src/modules/bt-management/types/dependent-result-handler-params.d.ts +7 -0
  361. package/lib/typescript/commonjs/src/modules/bt-management/types/dependent-result-handler-params.d.ts.map +1 -1
  362. package/lib/typescript/commonjs/src/modules/bt-management/types/device-command.d.ts +27 -0
  363. package/lib/typescript/commonjs/src/modules/bt-management/types/device-command.d.ts.map +1 -0
  364. package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts +2 -0
  365. package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
  366. package/lib/typescript/commonjs/src/modules/bt-management/types/integrated-devices.d.ts +3 -1
  367. package/lib/typescript/commonjs/src/modules/bt-management/types/integrated-devices.d.ts.map +1 -1
  368. package/lib/typescript/commonjs/src/modules/bt-management/types/measurement-group.d.ts +14 -0
  369. package/lib/typescript/commonjs/src/modules/bt-management/types/measurement-group.d.ts.map +1 -0
  370. package/lib/typescript/commonjs/src/modules/bt-management/types/parsing-case.d.ts +17 -0
  371. package/lib/typescript/commonjs/src/modules/bt-management/types/parsing-case.d.ts.map +1 -1
  372. package/lib/typescript/commonjs/src/modules/bt-management/utils/calculate-checksum.d.ts +13 -0
  373. package/lib/typescript/commonjs/src/modules/bt-management/utils/calculate-checksum.d.ts.map +1 -0
  374. package/lib/typescript/commonjs/src/modules/bt-management/utils/create-custom-field-parser.d.ts.map +1 -1
  375. package/lib/typescript/commonjs/src/modules/bt-management/utils/create-frame-validator.d.ts.map +1 -1
  376. package/lib/typescript/commonjs/src/modules/bt-management/utils/hex-to-bytes.d.ts +10 -0
  377. package/lib/typescript/commonjs/src/modules/bt-management/utils/hex-to-bytes.d.ts.map +1 -0
  378. package/lib/typescript/commonjs/src/modules/bt-management/utils/le-32-to-bytes.d.ts +3 -0
  379. package/lib/typescript/commonjs/src/modules/bt-management/utils/le-32-to-bytes.d.ts.map +1 -0
  380. package/lib/typescript/commonjs/src/modules/bt-management/utils/parse-measurement.d.ts +4 -1
  381. package/lib/typescript/commonjs/src/modules/bt-management/utils/parse-measurement.d.ts.map +1 -1
  382. package/lib/typescript/commonjs/src/modules/bt-management/utils/reject-custom-reading.d.ts +15 -0
  383. package/lib/typescript/commonjs/src/modules/bt-management/utils/reject-custom-reading.d.ts.map +1 -0
  384. package/lib/typescript/commonjs/src/modules/bt-management/utils/summarise-measurement-for-log.d.ts +9 -0
  385. package/lib/typescript/commonjs/src/modules/bt-management/utils/summarise-measurement-for-log.d.ts.map +1 -0
  386. package/lib/typescript/commonjs/src/modules/bt-management/utils/supported-measurement-type-keys.d.ts +10 -0
  387. package/lib/typescript/commonjs/src/modules/bt-management/utils/supported-measurement-type-keys.d.ts.map +1 -0
  388. package/lib/typescript/module/src/modules/bt-device/constants/device-instruction-pdfs.d.ts.map +1 -1
  389. package/lib/typescript/module/src/modules/bt-management/constants/integrated-devices-map.d.ts.map +1 -1
  390. package/lib/typescript/module/src/modules/bt-management/index.d.ts +20 -0
  391. package/lib/typescript/module/src/modules/bt-management/index.d.ts.map +1 -1
  392. package/lib/typescript/module/src/modules/bt-management/services/custom/compile-case-fields.d.ts +13 -0
  393. package/lib/typescript/module/src/modules/bt-management/services/custom/compile-case-fields.d.ts.map +1 -0
  394. package/lib/typescript/module/src/modules/bt-management/services/custom/compile-case-shape.d.ts +19 -0
  395. package/lib/typescript/module/src/modules/bt-management/services/custom/compile-case-shape.d.ts.map +1 -0
  396. package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-case.d.ts.map +1 -1
  397. package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-field.d.ts.map +1 -1
  398. package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-frame.d.ts.map +1 -1
  399. package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-lepu.d.ts +11 -0
  400. package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-lepu.d.ts.map +1 -0
  401. package/lib/typescript/module/src/modules/bt-management/services/custom/define-custom-device.d.ts.map +1 -1
  402. package/lib/typescript/module/src/modules/bt-management/services/device-creator.d.ts.map +1 -1
  403. package/lib/typescript/module/src/modules/bt-management/services/devices/aoj/aoj.thermometers.d.ts +24 -0
  404. package/lib/typescript/module/src/modules/bt-management/services/devices/aoj/aoj.thermometers.d.ts.map +1 -0
  405. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts +5 -8
  406. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts.map +1 -1
  407. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-command-writer.d.ts +74 -0
  408. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-command-writer.d.ts.map +1 -0
  409. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-connection-handler.d.ts +6 -4
  410. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-connection-handler.d.ts.map +1 -1
  411. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-data-processor.d.ts +20 -1
  412. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-data-processor.d.ts.map +1 -1
  413. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts +12 -1
  414. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  415. package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom-lepu-sequencer.d.ts +30 -0
  416. package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom-lepu-sequencer.d.ts.map +1 -0
  417. package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom.device.d.ts +32 -2
  418. package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom.device.d.ts.map +1 -1
  419. package/lib/typescript/module/src/modules/bt-management/services/devices/frame-parser.d.ts.map +1 -1
  420. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.command-builder.d.ts +24 -0
  421. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.command-builder.d.ts.map +1 -0
  422. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.commands.d.ts +32 -0
  423. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.commands.d.ts.map +1 -0
  424. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.device-info.d.ts +27 -0
  425. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.device-info.d.ts.map +1 -0
  426. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts +20 -0
  427. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts.map +1 -0
  428. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.file-names.d.ts +14 -0
  429. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.file-names.d.ts.map +1 -0
  430. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts +75 -0
  431. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts.map +1 -0
  432. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.frame-reader.d.ts +28 -0
  433. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.frame-reader.d.ts.map +1 -0
  434. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.frame.d.ts +12 -0
  435. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.frame.d.ts.map +1 -0
  436. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.identity-gate.d.ts +81 -0
  437. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.identity-gate.d.ts.map +1 -0
  438. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.name-match.d.ts +17 -0
  439. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.name-match.d.ts.map +1 -0
  440. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.response-type.d.ts +33 -0
  441. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.response-type.d.ts.map +1 -0
  442. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts +85 -0
  443. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts.map +1 -0
  444. package/lib/typescript/module/src/modules/bt-management/services/devices/polling-command-sequencer.d.ts +27 -0
  445. package/lib/typescript/module/src/modules/bt-management/services/devices/polling-command-sequencer.d.ts.map +1 -0
  446. package/lib/typescript/module/src/modules/bt-management/services/devices/sentinel-frame-reader.d.ts +52 -0
  447. package/lib/typescript/module/src/modules/bt-management/services/devices/sentinel-frame-reader.d.ts.map +1 -0
  448. package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts +53 -0
  449. package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts.map +1 -0
  450. package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts +45 -0
  451. package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts.map +1 -0
  452. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.bp-monitors.d.ts +18 -0
  453. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.bp-monitors.d.ts.map +1 -0
  454. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.duo-control-device.d.ts +19 -0
  455. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.duo-control-device.d.ts.map +1 -0
  456. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.d.ts +45 -0
  457. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.d.ts.map +1 -0
  458. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts +30 -0
  459. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts.map +1 -0
  460. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-samples.d.ts +39 -0
  461. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-samples.d.ts.map +1 -0
  462. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts +35 -0
  463. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts.map +1 -0
  464. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts +44 -0
  465. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts.map +1 -0
  466. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.d.ts +32 -0
  467. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.d.ts.map +1 -0
  468. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.lepod.d.ts +25 -0
  469. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.lepod.d.ts.map +1 -0
  470. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.oximeters.d.ts +39 -0
  471. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.oximeters.d.ts.map +1 -0
  472. package/lib/typescript/module/src/modules/bt-management/types/command-sequencer.d.ts +26 -0
  473. package/lib/typescript/module/src/modules/bt-management/types/command-sequencer.d.ts.map +1 -0
  474. package/lib/typescript/module/src/modules/bt-management/types/custom-case-spec.d.ts +43 -0
  475. package/lib/typescript/module/src/modules/bt-management/types/custom-case-spec.d.ts.map +1 -1
  476. package/lib/typescript/module/src/modules/bt-management/types/custom-checksum-algorithm.d.ts +10 -0
  477. package/lib/typescript/module/src/modules/bt-management/types/custom-checksum-algorithm.d.ts.map +1 -0
  478. package/lib/typescript/module/src/modules/bt-management/types/custom-checksum-spec.d.ts +23 -0
  479. package/lib/typescript/module/src/modules/bt-management/types/custom-checksum-spec.d.ts.map +1 -0
  480. package/lib/typescript/module/src/modules/bt-management/types/custom-device-definition.d.ts +5 -0
  481. package/lib/typescript/module/src/modules/bt-management/types/custom-device-definition.d.ts.map +1 -1
  482. package/lib/typescript/module/src/modules/bt-management/types/custom-device-spec.d.ts +12 -0
  483. package/lib/typescript/module/src/modules/bt-management/types/custom-device-spec.d.ts.map +1 -1
  484. package/lib/typescript/module/src/modules/bt-management/types/custom-field-encoding.d.ts +7 -1
  485. package/lib/typescript/module/src/modules/bt-management/types/custom-field-encoding.d.ts.map +1 -1
  486. package/lib/typescript/module/src/modules/bt-management/types/custom-frame-spec.d.ts +8 -0
  487. package/lib/typescript/module/src/modules/bt-management/types/custom-frame-spec.d.ts.map +1 -1
  488. package/lib/typescript/module/src/modules/bt-management/types/custom-lepu-spec.d.ts +44 -0
  489. package/lib/typescript/module/src/modules/bt-management/types/custom-lepu-spec.d.ts.map +1 -0
  490. package/lib/typescript/module/src/modules/bt-management/types/custom-measurement-spec.d.ts +9 -0
  491. package/lib/typescript/module/src/modules/bt-management/types/custom-measurement-spec.d.ts.map +1 -0
  492. package/lib/typescript/module/src/modules/bt-management/types/dependent-result-handler-params.d.ts +7 -0
  493. package/lib/typescript/module/src/modules/bt-management/types/dependent-result-handler-params.d.ts.map +1 -1
  494. package/lib/typescript/module/src/modules/bt-management/types/device-command.d.ts +27 -0
  495. package/lib/typescript/module/src/modules/bt-management/types/device-command.d.ts.map +1 -0
  496. package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts +2 -0
  497. package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
  498. package/lib/typescript/module/src/modules/bt-management/types/integrated-devices.d.ts +3 -1
  499. package/lib/typescript/module/src/modules/bt-management/types/integrated-devices.d.ts.map +1 -1
  500. package/lib/typescript/module/src/modules/bt-management/types/measurement-group.d.ts +14 -0
  501. package/lib/typescript/module/src/modules/bt-management/types/measurement-group.d.ts.map +1 -0
  502. package/lib/typescript/module/src/modules/bt-management/types/parsing-case.d.ts +17 -0
  503. package/lib/typescript/module/src/modules/bt-management/types/parsing-case.d.ts.map +1 -1
  504. package/lib/typescript/module/src/modules/bt-management/utils/calculate-checksum.d.ts +13 -0
  505. package/lib/typescript/module/src/modules/bt-management/utils/calculate-checksum.d.ts.map +1 -0
  506. package/lib/typescript/module/src/modules/bt-management/utils/create-custom-field-parser.d.ts.map +1 -1
  507. package/lib/typescript/module/src/modules/bt-management/utils/create-frame-validator.d.ts.map +1 -1
  508. package/lib/typescript/module/src/modules/bt-management/utils/hex-to-bytes.d.ts +10 -0
  509. package/lib/typescript/module/src/modules/bt-management/utils/hex-to-bytes.d.ts.map +1 -0
  510. package/lib/typescript/module/src/modules/bt-management/utils/le-32-to-bytes.d.ts +3 -0
  511. package/lib/typescript/module/src/modules/bt-management/utils/le-32-to-bytes.d.ts.map +1 -0
  512. package/lib/typescript/module/src/modules/bt-management/utils/parse-measurement.d.ts +4 -1
  513. package/lib/typescript/module/src/modules/bt-management/utils/parse-measurement.d.ts.map +1 -1
  514. package/lib/typescript/module/src/modules/bt-management/utils/reject-custom-reading.d.ts +15 -0
  515. package/lib/typescript/module/src/modules/bt-management/utils/reject-custom-reading.d.ts.map +1 -0
  516. package/lib/typescript/module/src/modules/bt-management/utils/summarise-measurement-for-log.d.ts +9 -0
  517. package/lib/typescript/module/src/modules/bt-management/utils/summarise-measurement-for-log.d.ts.map +1 -0
  518. package/lib/typescript/module/src/modules/bt-management/utils/supported-measurement-type-keys.d.ts +10 -0
  519. package/lib/typescript/module/src/modules/bt-management/utils/supported-measurement-type-keys.d.ts.map +1 -0
  520. package/package.json +1 -1
@@ -1,19 +1,17 @@
1
1
  "use strict";
2
2
 
3
- import { slog } from "../../../helpers/index.js";
4
3
  import { sentryLogger } from "../../../helpers/utils/sentry-logger.js";
5
4
  import { DeviceStatus } from "../../types/device-status.js";
6
5
  import { base64ToHex } from "../../utils/base-64-to-hex.js";
7
- import { hexToBase64 } from "../../utils/hex-to-base-64.js";
6
+ import { BTCommandWriter } from "./bt-command-writer.js";
8
7
  export class BTConnectionHandler {
9
8
  characteristicSubscriptions = [];
10
- isSendingCommand = false;
11
- retryCount = 0;
12
9
  constructor(device, mainServices, callbacks, preferredMtu) {
13
10
  this.device = device;
14
11
  this.mainServices = mainServices;
15
12
  this.callbacks = callbacks;
16
13
  this.preferredMtu = preferredMtu;
14
+ this.writer = new BTCommandWriter(device, callbacks.onError);
17
15
  }
18
16
  connect = async () => {
19
17
  try {
@@ -35,23 +33,12 @@ export class BTConnectionHandler {
35
33
  destroy = () => {
36
34
  this.characteristicSubscriptions.forEach(sub => sub?.remove());
37
35
  this.characteristicSubscriptions = [];
38
- this.isSendingCommand = false;
39
- this.retryCount = 0;
36
+ this.writer.reset();
40
37
  this.onDisconnectSubscription?.remove();
41
38
  };
42
- sendCommandToDevice = async () => {
43
- if (this.isSendingCommand) {
44
- return;
45
- }
46
- this.isSendingCommand = true;
47
- for (const mainService of this.mainServices) {
48
- if (mainService.writeUuid) {
49
- await this.sendCommand(mainService);
50
- }
51
- }
52
- this.isSendingCommand = false;
53
- this.retryCount = 0;
54
- };
39
+
40
+ /** Sends commands to the device, in order, one at a time. */
41
+ sendCommands = commands => this.writer.send(commands);
55
42
 
56
43
  /**
57
44
  * Asks for a larger MTU so a frame arrives in fewer notifications.
@@ -64,7 +51,8 @@ export class BTConnectionHandler {
64
51
  return;
65
52
  }
66
53
  try {
67
- await this.device.requestMTU(this.preferredMtu);
54
+ const negotiated = await this.device.requestMTU(this.preferredMtu);
55
+ this.writer.useNegotiatedMtu(negotiated?.mtu ?? this.device.mtu);
68
56
  } catch (error) {
69
57
  sentryLogger("info", "DEVICE: MTU request was not granted", {
70
58
  deviceId: this.device.id,
@@ -148,7 +136,7 @@ export class BTConnectionHandler {
148
136
  this.characteristicSubscriptions.push(subscription);
149
137
  }
150
138
  }
151
- await this.sendCommandToDevice();
139
+ await this.sendCommands(this.callbacks.initialCommands?.() ?? []);
152
140
  } catch (error) {
153
141
  sentryLogger("error", "DEVICE: Error subscribing to all characteristics", {
154
142
  error: error instanceof Error ? error.message : error,
@@ -157,33 +145,5 @@ export class BTConnectionHandler {
157
145
  this.callbacks.onError?.(error);
158
146
  }
159
147
  };
160
- sendCommand = async mainService => {
161
- if (!mainService.writeUuid) {
162
- return;
163
- }
164
- while (this.retryCount < 3) {
165
- try {
166
- const isConnected = await this.device.isConnected();
167
- if (!isConnected) {
168
- return;
169
- }
170
- const command = hexToBase64(mainService.writeUuid.mainCommandUuid);
171
- await this.device.writeCharacteristicWithResponseForService(mainService.uuid, mainService.writeUuid.uuid, command);
172
- this.retryCount = 0;
173
- break;
174
- } catch (error) {
175
- this.retryCount++;
176
- sentryLogger("error", "DEVICE: Error sending command", {
177
- error: error instanceof Error ? error.message : error,
178
- deviceName: this.device.name
179
- });
180
- if (this.retryCount === 3) {
181
- slog(error, "BT_CONNECTION_HANDLER: Error sending command", {
182
- deviceName: this.device.name
183
- });
184
- }
185
- }
186
- }
187
- };
188
148
  }
189
149
  //# sourceMappingURL=bt-connection-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["slog","sentryLogger","DeviceStatus","base64ToHex","hexToBase64","BTConnectionHandler","characteristicSubscriptions","isSendingCommand","retryCount","constructor","device","mainServices","callbacks","preferredMtu","connect","connectWithRetries","requestPreferredMtu","onStatusChanged","CONNECTED","discoverAllServicesAndCharacteristics","onDisconnectSubscription","onDisconnected","onDeviceDisconnected","subscribeToAllCharacteristics","error","Error","message","deviceName","name","onError","DISCONNECTED","destroy","forEach","sub","remove","sendCommandToDevice","mainService","writeUuid","sendCommand","requestMTU","deviceId","id","requestedMtu","String","maxRetries","retryDelay","maxDelay","connected","isConnected","errorCode","willRetry","Promise","resolve","setTimeout","Math","min","pow","monitorUuid","monitorUuids","subscription","monitorCharacteristicForService","uuid","result","value","hexValue","onDataReceived","push","command","mainCommandUuid","writeCharacteristicWithResponseForService"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-connection-handler.ts"],"mappings":";;AAEA,SAASA,IAAI,QAAQ,2BAAkB;AACvC,SAASC,YAAY,QAAQ,yCAAsC;AACnE,SAASC,YAAY,QAAQ,8BAA2B;AAGxD,SAASC,WAAW,QAAQ,+BAA4B;AACxD,SAASC,WAAW,QAAQ,+BAA4B;AAQxD,OAAO,MAAMC,mBAAmB,CAAC;EAEvBC,2BAA2B,GAAmB,EAAE;EAChDC,gBAAgB,GAAY,KAAK;EACjCC,UAAU,GAAW,CAAC;EAE9BC,WAAWA,CACQC,MAAc,EACdC,YAA2C,EAC3CC,SAAqC,EACrCC,YAAqB,EACtC;IAAA,KAJiBH,MAAc,GAAdA,MAAc;IAAA,KACdC,YAA2C,GAA3CA,YAA2C;IAAA,KAC3CC,SAAqC,GAArCA,SAAqC;IAAA,KACrCC,YAAqB,GAArBA,YAAqB;EACrC;EAEIC,OAAO,GAAG,MAAAA,CAAA,KAAY;IAC3B,IAAI;MACF,MAAM,IAAI,CAACC,kBAAkB,CAAC,CAAC;MAC/B,MAAM,IAAI,CAACC,mBAAmB,CAAC,CAAC;MAEhC,IAAI,CAACJ,SAAS,CAACK,eAAe,GAAGf,YAAY,CAACgB,SAAS,CAAC;MAExD,MAAM,IAAI,CAACR,MAAM,CAACS,qCAAqC,CAAC,CAAC;MAEzD,IAAI,CAACC,wBAAwB,GAAG,IAAI,CAACV,MAAM,CAACW,cAAc,CACxD,IAAI,CAACC,oBACP,CAAC;MAED,IAAI,CAACC,6BAA6B,CAAC,CAAC;IACtC,CAAC,CAAC,OAAOC,KAAK,EAAE;MACdvB,YAAY,CAAC,OAAO,EAAE,wCAAwC,EAAE;QAC9DuB,KAAK,EAAEA,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAGF,KAAK;QACrDG,UAAU,EAAE,IAAI,CAACjB,MAAM,CAACkB;MAC1B,CAAC,CAAC;MACF,IAAI,CAAChB,SAAS,CAACiB,OAAO,GAAGL,KAAyB,CAAC;MACnD,IAAI,CAACZ,SAAS,CAACK,eAAe,GAAGf,YAAY,CAAC4B,YAAY,CAAC;IAC7D;EACF,CAAC;EAEMC,OAAO,GAAGA,CAAA,KAAM;IACrB,IAAI,CAACzB,2BAA2B,CAAC0B,OAAO,CAAEC,GAAG,IAAKA,GAAG,EAAEC,MAAM,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC5B,2BAA2B,GAAG,EAAE;IACrC,IAAI,CAACC,gBAAgB,GAAG,KAAK;IAC7B,IAAI,CAACC,UAAU,GAAG,CAAC;IAEnB,IAAI,CAACY,wBAAwB,EAAEc,MAAM,CAAC,CAAC;EACzC,CAAC;EAEMC,mBAAmB,GAAG,MAAAA,CAAA,KAA2B;IACtD,IAAI,IAAI,CAAC5B,gBAAgB,EAAE;MACzB;IACF;IAEA,IAAI,CAACA,gBAAgB,GAAG,IAAI;IAE5B,KAAK,MAAM6B,WAAW,IAAI,IAAI,CAACzB,YAAY,EAAE;MAC3C,IAAIyB,WAAW,CAACC,SAAS,EAAE;QACzB,MAAM,IAAI,CAACC,WAAW,CAACF,WAAW,CAAC;MACrC;IACF;IAEA,IAAI,CAAC7B,gBAAgB,GAAG,KAAK;IAC7B,IAAI,CAACC,UAAU,GAAG,CAAC;EACrB,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;EACUQ,mBAAmB,GAAG,MAAAA,CAAA,KAA2B;IACvD,IAAI,CAAC,IAAI,CAACH,YAAY,EAAE;MACtB;IACF;IAEA,IAAI;MACF,MAAM,IAAI,CAACH,MAAM,CAAC6B,UAAU,CAAC,IAAI,CAAC1B,YAAY,CAAC;IACjD,CAAC,CAAC,OAAOW,KAAK,EAAE;MACdvB,YAAY,CAAC,MAAM,EAAE,qCAAqC,EAAE;QAC1DuC,QAAQ,EAAE,IAAI,CAAC9B,MAAM,CAAC+B,EAAE;QACxBd,UAAU,EAAE,IAAI,CAACjB,MAAM,CAACkB,IAAI;QAC5Bc,YAAY,EAAE,IAAI,CAAC7B,YAAY;QAC/BW,KAAK,EAAEA,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAGiB,MAAM,CAACnB,KAAK;MAC9D,CAAC,CAAC;IACJ;EACF,CAAC;EAEOT,kBAAkB,GAAG,MAAAA,CAAA,KAAY;IACvC,MAAM6B,UAAU,GAAG,CAAC;IACpB,MAAMC,UAAU,GAAG,IAAI;IACvB,MAAMC,QAAQ,GAAG,KAAK;IACtB,IAAIC,SAAS,GAAG,KAAK;IACrB,IAAIvC,UAAU,GAAG,CAAC;IAElB,OAAO,CAACuC,SAAS,IAAIvC,UAAU,GAAGoC,UAAU,EAAE;MAC5CG,SAAS,GAAG,MAAM,IAAI,CAACrC,MAAM,CAACsC,WAAW,CAAC,CAAC;MAC3C,IAAID,SAAS,EAAE;QACb;MACF;MACA,IAAI;QACF,MAAM,IAAI,CAACrC,MAAM,CAACI,OAAO,CAAC,CAAC;QAC3BiC,SAAS,GAAG,IAAI;MAClB,CAAC,CAAC,OAAOvB,KAAK,EAAE;QACdhB,UAAU,EAAE;QACZP,YAAY,CAAC,OAAO,EAAE,2BAA2B,EAAE;UACjDuC,QAAQ,EAAE,IAAI,CAAC9B,MAAM,CAAC+B,EAAE;UACxBd,UAAU,EAAE,IAAI,CAACjB,MAAM,CAACkB,IAAI;UAC5BJ,KAAK,EAAEA,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAGiB,MAAM,CAACnB,KAAK,CAAC;UAC7DyB,SAAS,EAAGzB,KAAK,EAAeyB,SAAS;UACzCzC;QACF,CAAC,CAAC;QACF,IAAIA,UAAU,IAAIoC,UAAU,EAAE;UAC5B3C,YAAY,CAAC,OAAO,EAAE,6CAA6C,EAAE;YACnEuC,QAAQ,EAAE,IAAI,CAAC9B,MAAM,CAAC+B,EAAE;YACxBd,UAAU,EAAE,IAAI,CAACjB,MAAM,CAACkB,IAAI;YAC5BJ,KAAK,EAAEA,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAGiB,MAAM,CAACnB,KAAK,CAAC;YAC7DyB,SAAS,EAAGzB,KAAK,EAAeyB,SAAS;YACzCC,SAAS,EAAE1C,UAAU,GAAGoC;UAC1B,CAAC,CAAC;UACF,MAAMpB,KAAK;QACb;QAEA,MAAM,IAAI2B,OAAO,CAAEC,OAAO,IACxBC,UAAU,CACRD,OAAO,EACPE,IAAI,CAACC,GAAG,CAACV,UAAU,GAAGS,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEhD,UAAU,GAAG,CAAC,CAAC,EAAEsC,QAAQ,CAC7D,CACF,CAAC;MACH;IACF;EACF,CAAC;EAEOxB,oBAAoB,GAAIE,KAAsB,IAAK;IACzDvB,YAAY,CAAC,MAAM,EAAE,oCAAoC,EAAE;MACzDuB,KAAK,EAAEA,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAGF,KAAK;MACrDG,UAAU,EAAE,IAAI,CAACjB,MAAM,CAACkB;IAC1B,CAAC,CAAC;IACF,IAAIJ,KAAK,EAAE;MACT,IAAI,CAACZ,SAAS,CAACiB,OAAO,GAAGL,KAAK,CAAC;IACjC;;IAEA;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACZ,SAAS,CAACK,eAAe,GAAGf,YAAY,CAAC4B,YAAY,CAAC;IAC3D,IAAI,CAACC,OAAO,CAAC,CAAC;EAChB,CAAC;EAEOR,6BAA6B,GAAG,MAAAA,CAAA,KAAY;IAClD,IAAI;MACF,KAAK,MAAMa,WAAW,IAAI,IAAI,CAACzB,YAAY,EAAE;QAC3C,KAAK,MAAM8C,WAAW,IAAIrB,WAAW,CAACsB,YAAY,EAAE;UAClD,MAAMC,YAAY,GAAG,IAAI,CAACjD,MAAM,CAACkD,+BAA+B,CAC9DxB,WAAW,CAACyB,IAAI,EAChBJ,WAAW,CAACI,IAAI,EAChB,CAACrC,KAAK,EAAEsC,MAAM,KAAK;YACjB,IAAItC,KAAK,EAAE;cACT,IAAI,CAACZ,SAAS,CAACiB,OAAO,GAAGL,KAAK,CAAC;cAE/B;YACF;YAEA,IAAI,CAACsC,MAAM,IAAI,CAACA,MAAM,CAACC,KAAK,EAAE;cAC5B,IAAI,CAACnD,SAAS,CAACiB,OAAO,GACpB,IAAIJ,KAAK,CAAC,iCAAiC,CAC7C,CAAC;cAED;YACF;YAEA,MAAMuC,QAAQ,GAAG7D,WAAW,CAAC2D,MAAM,CAACC,KAAK,CAAC;YAE1C,IAAI,CAACnD,SAAS,CAACqD,cAAc,GAAGH,MAAM,CAACD,IAAI,EAAEG,QAAQ,CAAC;UACxD,CACF,CAAC;UAED,IAAI,CAAC1D,2BAA2B,CAAC4D,IAAI,CAACP,YAAY,CAAC;QACrD;MACF;MAEA,MAAM,IAAI,CAACxB,mBAAmB,CAAC,CAAC;IAClC,CAAC,CAAC,OAAOX,KAAK,EAAE;MACdvB,YAAY,CACV,OAAO,EACP,kDAAkD,EAClD;QACEuB,KAAK,EAAEA,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAGF,KAAK;QACrDG,UAAU,EAAE,IAAI,CAACjB,MAAM,CAACkB;MAC1B,CACF,CAAC;MACD,IAAI,CAAChB,SAAS,CAACiB,OAAO,GAAGL,KAAyB,CAAC;IACrD;EACF,CAAC;EAEOc,WAAW,GAAG,MAAOF,WAAqB,IAAoB;IACpE,IAAI,CAACA,WAAW,CAACC,SAAS,EAAE;MAC1B;IACF;IACA,OAAO,IAAI,CAAC7B,UAAU,GAAG,CAAC,EAAE;MAC1B,IAAI;QACF,MAAMwC,WAAW,GAAG,MAAM,IAAI,CAACtC,MAAM,CAACsC,WAAW,CAAC,CAAC;QAEnD,IAAI,CAACA,WAAW,EAAE;UAChB;QACF;QAEA,MAAMmB,OAAO,GAAG/D,WAAW,CAACgC,WAAW,CAACC,SAAS,CAAC+B,eAAe,CAAC;QAElE,MAAM,IAAI,CAAC1D,MAAM,CAAC2D,yCAAyC,CACzDjC,WAAW,CAACyB,IAAI,EAChBzB,WAAW,CAACC,SAAS,CAACwB,IAAI,EAC1BM,OACF,CAAC;QACD,IAAI,CAAC3D,UAAU,GAAG,CAAC;QACnB;MACF,CAAC,CAAC,OAAOgB,KAAK,EAAE;QACd,IAAI,CAAChB,UAAU,EAAE;QACjBP,YAAY,CAAC,OAAO,EAAE,+BAA+B,EAAE;UACrDuB,KAAK,EAAEA,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAGF,KAAK;UACrDG,UAAU,EAAE,IAAI,CAACjB,MAAM,CAACkB;QAC1B,CAAC,CAAC;QACF,IAAI,IAAI,CAACpB,UAAU,KAAK,CAAC,EAAE;UACzBR,IAAI,CAACwB,KAAK,EAAE,8CAA8C,EAAE;YAC1DG,UAAU,EAAE,IAAI,CAACjB,MAAM,CAACkB;UAC1B,CAAC,CAAC;QACJ;MACF;IACF;EACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["sentryLogger","DeviceStatus","base64ToHex","BTCommandWriter","BTConnectionHandler","characteristicSubscriptions","constructor","device","mainServices","callbacks","preferredMtu","writer","onError","connect","connectWithRetries","requestPreferredMtu","onStatusChanged","CONNECTED","discoverAllServicesAndCharacteristics","onDisconnectSubscription","onDisconnected","onDeviceDisconnected","subscribeToAllCharacteristics","error","Error","message","deviceName","name","DISCONNECTED","destroy","forEach","sub","remove","reset","sendCommands","commands","send","negotiated","requestMTU","useNegotiatedMtu","mtu","deviceId","id","requestedMtu","String","maxRetries","retryDelay","maxDelay","connected","retryCount","isConnected","errorCode","willRetry","Promise","resolve","setTimeout","Math","min","pow","mainService","monitorUuid","monitorUuids","subscription","monitorCharacteristicForService","uuid","result","value","hexValue","onDataReceived","push","initialCommands"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-connection-handler.ts"],"mappings":"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","ignoreList":[]}
@@ -57,14 +57,13 @@ export class BTDataProcessor {
57
57
  * A frame that fails its integrity check is reported and skipped rather than parsed.
58
58
  */
59
59
  readFramesFromBuffer = (reader, uuid, buffer) => {
60
- let hasReadFrame = false;
61
60
  while (buffer.length > 0) {
62
61
  const result = reader.readFrame(buffer);
63
62
  const hasProgressed = result.consumedBytes > 0;
64
63
  buffer.splice(0, result.consumedBytes);
65
64
  if (result.status === FrameReadStatus.COMPLETE) {
66
- hasReadFrame = true;
67
65
  this.handleFrame(uuid, result.frame);
66
+ this.answerFrame(result.frame);
68
67
  continue;
69
68
  }
70
69
  if (result.status === FrameReadStatus.CORRUPT) {
@@ -74,9 +73,6 @@ export class BTDataProcessor {
74
73
  break;
75
74
  }
76
75
  }
77
- if (hasReadFrame) {
78
- this.callbacks.onSendCommandToDevice?.();
79
- }
80
76
  };
81
77
 
82
78
  /**
@@ -88,7 +84,22 @@ export class BTDataProcessor {
88
84
  }
89
85
  this.handleFrame(uuid, buffer);
90
86
  this.buffers.set(this.currentUuid, []);
91
- this.callbacks.onSendCommandToDevice?.();
87
+ this.answerFrame(buffer);
88
+ };
89
+
90
+ /**
91
+ * Answers one complete frame with whatever the device's sequencer decides.
92
+ *
93
+ * Every frame is offered, including one that matched no parsing case. An identity reply
94
+ * and a file-transfer chunk carry no measurement, and a sequencer that never saw them
95
+ * could not take the step that follows - the exchange would stop dead on the first frame
96
+ * that was protocol rather than data.
97
+ */
98
+ answerFrame = frame => {
99
+ const commands = this.callbacks.nextCommand?.(frame);
100
+ if (commands && commands.length > 0) {
101
+ this.callbacks.sendCommands?.(commands);
102
+ }
92
103
  };
93
104
  handleFrame = (uuid, frame) => {
94
105
  const data = this.frameParser.parse(uuid, frame);
@@ -1 +1 @@
1
- {"version":3,"names":["sentryLogger","CaseType","FrameReadStatus","FrameParser","MeasurementStateMachine","BTDataProcessor","buffers","Map","constructor","device","mainServices","stuckDataTimeoutDuration","callbacks","frameReader","frameParser","measurementState","onStatusChanged","onStreamStart","onResult","currentUuid","destroy","clear","reset","clearTimeout","stuckDataTimeout","undefined","processData","uuid","hexValue","String","toLowerCase","buffer","get","push","set","startStuckTimeout","readFramesFromBuffer","readWholeBuffer","reader","hasReadFrame","length","result","readFrame","hasProgressed","consumedBytes","splice","status","COMPLETE","handleFrame","frame","CORRUPT","reportCorruptFrame","INCOMPLETE","onSendCommandToDevice","validatePackage","data","parse","join","dependentData","parsingCase","caseType","DEPENDENT","handleDependentResult","advance","onError","Error","cause","message","setTimeout","cancelConnection"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-data-processor.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["sentryLogger","CaseType","FrameReadStatus","FrameParser","MeasurementStateMachine","BTDataProcessor","buffers","Map","constructor","device","mainServices","stuckDataTimeoutDuration","callbacks","frameReader","frameParser","measurementState","onStatusChanged","onStreamStart","onResult","currentUuid","destroy","clear","reset","clearTimeout","stuckDataTimeout","undefined","processData","uuid","hexValue","String","toLowerCase","buffer","get","push","set","startStuckTimeout","readFramesFromBuffer","readWholeBuffer","reader","length","result","readFrame","hasProgressed","consumedBytes","splice","status","COMPLETE","handleFrame","frame","answerFrame","CORRUPT","reportCorruptFrame","INCOMPLETE","validatePackage","commands","nextCommand","sendCommands","data","parse","join","dependentData","parsingCase","caseType","DEPENDENT","handleDependentResult","advance","onError","Error","cause","message","setTimeout","cancelConnection"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-data-processor.ts"],"mappings":"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","ignoreList":[]}
@@ -2,8 +2,11 @@
2
2
 
3
3
  import { sentryLogger } from "../../../helpers/utils/sentry-logger.js";
4
4
  import { DeviceStatus } from "../../types/device-status.js";
5
+ import { summariseMeasurementForLog } from "../../utils/summarise-measurement-for-log.js";
6
+ import { supportedMeasurementTypeKeys } from "../../utils/supported-measurement-type-keys.js";
5
7
  import { BTConnectionHandler } from "./bt-connection-handler.js";
6
8
  import { BTDataProcessor } from "./bt-data-processor.js";
9
+ import { pollingSequencerFor } from "./polling-command-sequencer.js";
7
10
  export class BTManagedDevice {
8
11
  /**
9
12
  * The timeout in milliseconds for the stuck data.
@@ -18,6 +21,17 @@ export class BTManagedDevice {
18
21
  * @returns The handled data.
19
22
  */
20
23
 
24
+ /**
25
+ * Builds the policy that decides what to send this device, and when.
26
+ *
27
+ * A factory rather than an instance, because a sequencer carries the state of the
28
+ * exchange - whether the device has identified itself, how far a file read has got. One
29
+ * shared across connections would resume a conversation the device has forgotten.
30
+ *
31
+ * A device that leaves this undefined polls with the command its services declare, which
32
+ * is what every device did before a policy could be expressed at all.
33
+ */
34
+
21
35
  /**
22
36
  * Locates frame boundaries inside the notification buffer.
23
37
  *
@@ -91,10 +105,7 @@ export class BTManagedDevice {
91
105
  ...data
92
106
  }) => {
93
107
  sentryLogger("info", "BT_MANAGER: Calling onResult callback", {
94
- data: {
95
- ...data,
96
- diagramPoints: "diagramPoints" in data ? data.diagramPoints.length : undefined
97
- },
108
+ data: summariseMeasurementForLog(data),
98
109
  deviceData: this.deviceData,
99
110
  deviceName: this.deviceData.name
100
111
  });
@@ -118,7 +129,8 @@ export class BTManagedDevice {
118
129
  };
119
130
  connect = async () => {
120
131
  // To access the abstract property in the constructor, we need to set it here
121
- this.deviceData.measurementTypes = this.getSupportedMeasurementTypeKeys();
132
+ this.deviceData.measurementTypes = supportedMeasurementTypeKeys(this.mainServices);
133
+ const sequencer = this.createCommandSequencer?.() ?? pollingSequencerFor(this.mainServices);
122
134
  this.connectionHandler = new BTConnectionHandler(this.device, this.mainServices, {
123
135
  onStatusChanged: status => {
124
136
  this.onDeviceStatusChanged?.bind(this)(status);
@@ -130,7 +142,8 @@ export class BTManagedDevice {
130
142
  onError: error => this.onError?.bind(this)(error),
131
143
  onDataReceived: (uuid, hexValue) => {
132
144
  this.dataProcessor?.processData(uuid, hexValue);
133
- }
145
+ },
146
+ initialCommands: () => sequencer.initialCommands()
134
147
  }, this.preferredMtu);
135
148
  this.dataProcessor = new BTDataProcessor(this.device, this.mainServices, this.stuckDataTimeout, {
136
149
  onStatusChanged: this.onDeviceStatusChanged?.bind(this),
@@ -143,18 +156,12 @@ export class BTManagedDevice {
143
156
  this.onError?.bind(this)(error);
144
157
  }
145
158
  },
146
- onSendCommandToDevice: this.connectionHandler?.sendCommandToDevice?.bind(this),
159
+ nextCommand: frame => sequencer.nextCommand(frame),
160
+ sendCommands: commands => void this.connectionHandler?.sendCommands(commands),
147
161
  onError: this.onError?.bind(this),
148
162
  handleDependentResult: this.handleDependentResult?.bind(this)
149
163
  }, this.frameReader);
150
164
  await this.connectionHandler.connect();
151
165
  };
152
- getSupportedMeasurementTypeKeys = () => {
153
- const measurementTypes = this.mainServices.flatMap(service => {
154
- return service.monitorUuids.flatMap(uuid => uuid.parsingModel.cases.map(c => c.measurementTypeKey) || []);
155
- }).filter(type => type !== undefined);
156
- const uniqueMeasurementTypes = [...new Set(measurementTypes.flat())];
157
- return uniqueMeasurementTypes;
158
- };
159
166
  }
160
167
  //# sourceMappingURL=bt-managed-device.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["sentryLogger","DeviceStatus","BTConnectionHandler","BTDataProcessor","BTManagedDevice","constructor","device","deviceName","onError","onErrorCallback","onDeviceStatusChanged","onDeviceStatusChangedCallback","onResult","onResultCallback","onDeviceDisconnected","onDeviceDisconnectedCallback","deviceId","id","deviceData","name","localName","manufacturerData","sn","measurementTypes","status","measurementTypeKey","error","Error","message","caseType","_","data","diagramPoints","length","undefined","destroy","connectionHandler","dataProcessor","connect","getSupportedMeasurementTypeKeys","mainServices","onStatusChanged","bind","DISCONNECTED","onDataReceived","uuid","hexValue","processData","preferredMtu","stuckDataTimeout","onStreamStart","validatePackage","parsedData","collectedValues","handleSuccessResult","onSendCommandToDevice","sendCommandToDevice","handleDependentResult","frameReader","flatMap","service","monitorUuids","parsingModel","cases","map","c","filter","type","uniqueMeasurementTypes","Set","flat"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-managed-device.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["sentryLogger","DeviceStatus","summariseMeasurementForLog","supportedMeasurementTypeKeys","BTConnectionHandler","BTDataProcessor","pollingSequencerFor","BTManagedDevice","constructor","device","deviceName","onError","onErrorCallback","onDeviceStatusChanged","onDeviceStatusChangedCallback","onResult","onResultCallback","onDeviceDisconnected","onDeviceDisconnectedCallback","deviceId","id","deviceData","name","localName","manufacturerData","sn","measurementTypes","status","measurementTypeKey","error","Error","message","caseType","_","data","destroy","connectionHandler","dataProcessor","undefined","connect","mainServices","sequencer","createCommandSequencer","onStatusChanged","bind","DISCONNECTED","onDataReceived","uuid","hexValue","processData","initialCommands","preferredMtu","stuckDataTimeout","onStreamStart","validatePackage","parsedData","collectedValues","handleSuccessResult","nextCommand","frame","sendCommands","commands","handleDependentResult","frameReader"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-managed-device.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ import { sentryLogger } from "../../../../helpers/utils/sentry-logger.js";
4
+ import { LepuCommandBuilder } from "../lepu/lepu.command-builder.js";
5
+ import { LepuIdentityGate } from "../lepu/lepu.identity-gate.js";
6
+
7
+ /** Registration guarantees at least one start byte; this keeps the indexed read total. */
8
+ const DEFAULT_START_BYTE = "a5";
9
+ /**
10
+ * Builds the gate a Lepu declaration asks for.
11
+ *
12
+ * A fresh builder each time, because its sequence number is per connection: one shared
13
+ * across devices would interleave their counters, which is a defect the vendor's own global
14
+ * counter has.
15
+ *
16
+ * Frames are built with the first declared start byte. A device that accepts either still
17
+ * answers on the one it is addressed with, so the list matters for reading and its head for
18
+ * writing.
19
+ */
20
+ /**
21
+ * Records what the device said it was.
22
+ *
23
+ * The model number is logged because it is the only place one exists: the vendor's SDK
24
+ * never reads the field back, so a declaration written without it is completed by
25
+ * connecting once and reading this line.
26
+ */
27
+ const recordLepuIdentity = (deviceData, info) => {
28
+ deviceData.sn = info.serialNumber;
29
+ sentryLogger("info", "BT_MANAGER: Device identified itself", {
30
+ deviceId: deviceData.id,
31
+ deviceName: deviceData.name,
32
+ deviceType: info.deviceType,
33
+ branchCode: info.branchCode,
34
+ protocolMaxLength: info.protocolMaxLength
35
+ });
36
+ };
37
+ const createLepuSequencer = (lepu, report) => new LepuIdentityGate({
38
+ write: {
39
+ serviceUuid: lepu.write.serviceUuid,
40
+ characteristicUuid: lepu.write.characteristicUuid
41
+ },
42
+ builder: new LepuCommandBuilder(lepu.startBytes[0] ?? DEFAULT_START_BYTE),
43
+ expectedDeviceTypes: lepu.expectedDeviceTypes,
44
+ ...(lepu.pollCommand === undefined ? {} : {
45
+ pollCommand: lepu.pollCommand
46
+ }),
47
+ onIdentified: report.onIdentified,
48
+ onRefused: report.onRefused
49
+ });
50
+ export { createLepuSequencer, recordLepuIdentity };
51
+ //# sourceMappingURL=custom-lepu-sequencer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["sentryLogger","LepuCommandBuilder","LepuIdentityGate","DEFAULT_START_BYTE","recordLepuIdentity","deviceData","info","sn","serialNumber","deviceId","id","deviceName","name","deviceType","branchCode","protocolMaxLength","createLepuSequencer","lepu","report","write","serviceUuid","characteristicUuid","builder","startBytes","expectedDeviceTypes","pollCommand","undefined","onIdentified","onRefused"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/custom/custom-lepu-sequencer.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,4CAAyC;AAItE,SAASC,kBAAkB,QAAQ,iCAA8B;AAEjE,SAASC,gBAAgB,QAAQ,+BAA4B;;AAE7D;AACA,MAAMC,kBAAkB,GAAG,IAAI;AAO/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,kBAAkB,GAAGA,CACzBC,UAAsB,EACtBC,IAAoB,KACX;EACTD,UAAU,CAACE,EAAE,GAAGD,IAAI,CAACE,YAAY;EAEjCR,YAAY,CAAC,MAAM,EAAE,sCAAsC,EAAE;IAC3DS,QAAQ,EAAEJ,UAAU,CAACK,EAAE;IACvBC,UAAU,EAAEN,UAAU,CAACO,IAAI;IAC3BC,UAAU,EAAEP,IAAI,CAACO,UAAU;IAC3BC,UAAU,EAAER,IAAI,CAACQ,UAAU;IAC3BC,iBAAiB,EAAET,IAAI,CAACS;EAC1B,CAAC,CAAC;AACJ,CAAC;AAED,MAAMC,mBAAmB,GAAGA,CAC1BC,IAAoB,EACpBC,MAAsB,KAEtB,IAAIhB,gBAAgB,CAAC;EACnBiB,KAAK,EAAE;IACLC,WAAW,EAAEH,IAAI,CAACE,KAAK,CAACC,WAAW;IACnCC,kBAAkB,EAAEJ,IAAI,CAACE,KAAK,CAACE;EACjC,CAAC;EACDC,OAAO,EAAE,IAAIrB,kBAAkB,CAACgB,IAAI,CAACM,UAAU,CAAC,CAAC,CAAC,IAAIpB,kBAAkB,CAAC;EACzEqB,mBAAmB,EAAEP,IAAI,CAACO,mBAAmB;EAC7C,IAAIP,IAAI,CAACQ,WAAW,KAAKC,SAAS,GAAG,CAAC,CAAC,GAAG;IAAED,WAAW,EAAER,IAAI,CAACQ;EAAY,CAAC,CAAC;EAC5EE,YAAY,EAAET,MAAM,CAACS,YAAY;EACjCC,SAAS,EAAEV,MAAM,CAACU;AACpB,CAAC,CAAC;AAEJ,SAASZ,mBAAmB,EAAEZ,kBAAkB","ignoreList":[]}
@@ -2,9 +2,11 @@
2
2
 
3
3
  import { CaseType } from "../../../types/case-type.js";
4
4
  import { createFrameValidator } from "../../../utils/create-frame-validator.js";
5
+ import { parseMeasurement } from "../../../utils/parse-measurement.js";
6
+ import { discardedReadingError, rejectCustomReading } from "../../../utils/reject-custom-reading.js";
5
7
  import { BTManagedDevice } from "../bt-managed-device.js";
6
- const RESERVED_KEYS = ["measurementTypeKey", "caseType"];
7
-
8
+ import { LepuFrameReader } from "../lepu/lepu.frame-reader.js";
9
+ import { createLepuSequencer, recordLepuIdentity } from "./custom-lepu-sequencer.js";
8
10
  /**
9
11
  * Runs a device registered with defineCustomDevice.
10
12
  *
@@ -21,10 +23,37 @@ export class CustomDevice extends BTManagedDevice {
21
23
  this.definition = definition;
22
24
  this.mainServices = definition.mainServices;
23
25
  this.stuckDataTimeout = definition.stuckDataTimeout;
26
+ if (definition.preferredMtu !== undefined) {
27
+ this.preferredMtu = definition.preferredMtu;
28
+ }
29
+ this.declareLepuProtocol(definition);
24
30
  definition.frames.forEach((frame, uuid) => {
25
31
  this.validators.set(uuid, createFrameValidator(frame));
26
32
  });
27
33
  }
34
+
35
+ /**
36
+ * Gives a Lepu declaration its frame reader and its command sequence.
37
+ *
38
+ * Both or neither: the reader finds frame edges the family's own way, and the gate is
39
+ * what decides anything may be sent at all. A declaration that had the reader without the
40
+ * gate would poll hardware it had not identified, which is the case the gate exists for.
41
+ */
42
+ declareLepuProtocol(definition) {
43
+ const lepu = definition.lepu;
44
+ if (!lepu) {
45
+ return;
46
+ }
47
+ this.frameReader = new LepuFrameReader(lepu.startBytes);
48
+ this.createCommandSequencer = () => createLepuSequencer(lepu, {
49
+ onIdentified: this.onIdentified,
50
+ onRefused: this.onIdentityRefused
51
+ });
52
+ }
53
+ onIdentified = info => recordLepuIdentity(this.deviceData, info);
54
+ onIdentityRefused = reason => {
55
+ this.onError?.(new Error(`Custom device "${this.definition.id}" was not addressed: ${reason}.`));
56
+ };
28
57
  validatePackage = (pkg, uuid) => {
29
58
  const validate = this.validators.get(String(uuid ?? "").toLowerCase());
30
59
  if (!validate) {
@@ -40,7 +69,7 @@ export class CustomDevice extends BTManagedDevice {
40
69
  */
41
70
  handleDependentResult = data => {
42
71
  try {
43
- this.report(data.parsedData);
72
+ this.reportFrame(data);
44
73
  } catch (error) {
45
74
  this.onError?.(error);
46
75
  }
@@ -60,39 +89,63 @@ export class CustomDevice extends BTManagedDevice {
60
89
  handleSuccessResult() {
61
90
  return;
62
91
  }
63
- report(parsedData) {
64
- const measurementTypeKey = parsedData.measurementTypeKey;
65
- if (!measurementTypeKey) {
66
- this.fail("a result frame carries no measurement type", parsedData);
92
+
93
+ /**
94
+ * Reports what the frame carried, which may be more than one reading.
95
+ *
96
+ * A device handing over its stored history answers one request with every record it
97
+ * holds, back to back. Those were taken at different times and are separate readings, so
98
+ * each record is decoded and reported on its own. A trailing part-record is ignored: half
99
+ * a record is not a reading.
100
+ */
101
+ reportFrame(data) {
102
+ const repeated = data.parsingCase.repeatedRecords;
103
+ if (!repeated || !data.frame) {
104
+ this.report(data.parsedData, data.parsingCase);
67
105
  return;
68
106
  }
69
- const names = Object.keys(parsedData).filter(key => !RESERVED_KEYS.includes(key));
70
- if (names.length === 0) {
71
- this.fail("a result frame decoded no properties", parsedData);
72
- return;
107
+ const records = Math.floor((data.frame.length - repeated.from) / repeated.recordBytes);
108
+ for (let record = 0; record < records; record++) {
109
+ this.report(parseMeasurement(data.frame, data.parsingCase, repeated.from + record * repeated.recordBytes), data.parsingCase);
73
110
  }
74
- const rejection = names.map(name => this.reject(measurementTypeKey, name, parsedData[name])).find(message => message !== undefined);
75
- if (rejection) {
76
- this.fail(rejection, parsedData);
111
+ }
112
+
113
+ /**
114
+ * Reports every reading the frame carried.
115
+ *
116
+ * One frame is often one reading, but a multi-parameter monitor sends a heart rate, an
117
+ * oxygen saturation and a temperature together. Those are separate measurements, so they
118
+ * are reported separately rather than merged into one object whose properties came from
119
+ * different instruments.
120
+ *
121
+ * A reading that fails its checks is discarded on its own. A temperature the device could
122
+ * not take is no reason to withhold the heart rate in the same frame.
123
+ */
124
+ report(parsedData, parsingCase) {
125
+ const measurements = parsingCase.measurements ?? [];
126
+ if (measurements.length === 0) {
127
+ this.discard("a result frame carries no measurement type", parsedData);
77
128
  return;
78
129
  }
79
- this.onResult?.(parsedData);
130
+ measurements.forEach(measurement => this.reportMeasurement(parsedData, measurement));
80
131
  }
81
- reject(measurementTypeKey, name, value) {
82
- const field = this.definition.fields.get(`${measurementTypeKey}:${name}`);
83
- if (!field) {
84
- return `decoded "${name}", which is not declared for ${measurementTypeKey}`;
85
- }
86
- if (typeof value !== "number" || !Number.isFinite(value)) {
87
- return `could not decode ${name}; the frame was shorter than the declaration expects`;
88
- }
89
- if (value < field.min || value > field.max) {
90
- return `decoded ${name} = ${value} ${field.unit}, outside the accepted range ${field.min}-${field.max} ${field.unit}`;
91
- }
92
- return undefined;
132
+ discard(reason, parsedData) {
133
+ this.onError?.(discardedReadingError(this.definition.id, reason, parsedData));
93
134
  }
94
- fail(reason, parsedData) {
95
- this.onError?.(new Error(`Custom device "${this.definition.id}": ${reason}. The reading was discarded (decoded ${JSON.stringify(parsedData)}).`));
135
+ reportMeasurement(parsedData, measurement) {
136
+ const reading = {
137
+ caseType: parsedData.caseType,
138
+ measurementTypeKey: measurement.measurementTypeKey
139
+ };
140
+ measurement.fieldNames.forEach(name => {
141
+ reading[name] = parsedData[name];
142
+ });
143
+ const rejection = measurement.fieldNames.map(name => rejectCustomReading(this.definition.fields, measurement.measurementTypeKey, name, reading[name])).find(message => message !== undefined);
144
+ if (rejection) {
145
+ this.discard(rejection, reading);
146
+ return;
147
+ }
148
+ this.onResult?.(reading);
96
149
  }
97
150
  }
98
151
  //# sourceMappingURL=custom.device.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["CaseType","createFrameValidator","BTManagedDevice","RESERVED_KEYS","CustomDevice","validators","Map","constructor","device","params","definition","mainServices","stuckDataTimeout","frames","forEach","frame","uuid","set","validatePackage","pkg","validate","get","String","toLowerCase","handleDependentResult","data","report","parsedData","error","onError","parsingCase","caseType","OTHER","handleSuccessResult","measurementTypeKey","fail","names","Object","keys","filter","key","includes","length","rejection","map","name","reject","find","message","undefined","onResult","value","field","fields","Number","isFinite","min","max","unit","reason","Error","id","JSON","stringify"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/custom/custom.device.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["CaseType","createFrameValidator","parseMeasurement","discardedReadingError","rejectCustomReading","BTManagedDevice","LepuFrameReader","createLepuSequencer","recordLepuIdentity","CustomDevice","validators","Map","constructor","device","params","definition","mainServices","stuckDataTimeout","preferredMtu","undefined","declareLepuProtocol","frames","forEach","frame","uuid","set","lepu","frameReader","startBytes","createCommandSequencer","onIdentified","onRefused","onIdentityRefused","info","deviceData","reason","onError","Error","id","validatePackage","pkg","validate","get","String","toLowerCase","handleDependentResult","data","reportFrame","error","parsingCase","caseType","OTHER","handleSuccessResult","repeated","repeatedRecords","report","parsedData","records","Math","floor","length","from","recordBytes","record","measurements","discard","measurement","reportMeasurement","reading","measurementTypeKey","fieldNames","name","rejection","map","fields","find","message","onResult"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/custom/custom.device.ts"],"mappings":"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","ignoreList":[]}
@@ -31,7 +31,8 @@ export class FrameParser {
31
31
  return {
32
32
  parsingCase,
33
33
  measurementTypeKey: parsingCase.measurementTypeKey,
34
- parsedData: parsedData
34
+ parsedData: parsedData,
35
+ frame
35
36
  };
36
37
  }
37
38
  findParsingModel(uuid) {
@@ -1 +1 @@
1
- {"version":3,"names":["parseMeasurement","FrameParser","constructor","mainServices","parse","uuid","frame","parsingModel","findParsingModel","caseValue","readCaseValue","parsingCase","cases","find","declared","parsedData","measurementTypeKey","mainService","characteristic","monitorUuids","monitored","toLowerCase","undefined","caseValuePosition","map","index","join"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/frame-parser.ts"],"mappings":";;AAMA,SAASA,gBAAgB,QAAQ,kCAA+B;;AAEhE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAW,CAAwB;EAC9CC,WAAWA,CAAkBC,YAA2C,EAAE;IAAA,KAA7CA,YAA2C,GAA3CA,YAA2C;EAAG;EAEpEC,KAAKA,CACVC,IAAY,EACZC,KAAe,EAC8B;IAC7C,MAAMC,YAAY,GAAG,IAAI,CAACC,gBAAgB,CAACH,IAAI,CAAC;IAEhD,IAAI,CAACE,YAAY,EAAE;MACjB;IACF;IAEA,MAAME,SAAS,GAAG,IAAI,CAACC,aAAa,CAACH,YAAY,EAAED,KAAK,CAAC;IAEzD,MAAMK,WAAW,GAAGJ,YAAY,CAACK,KAAK,EAAEC,IAAI,CACzCC,QAAQ,IAAKA,QAAQ,CAACL,SAAS,KAAKA,SACvC,CAAC;IAED,IAAI,CAACE,WAAW,EAAE;MAChB;IACF;IAEA,MAAMI,UAAU,GAAGf,gBAAgB,CAACM,KAAK,EAAEK,WAAW,CAAC;IAEvD,IAAI,CAACI,UAAU,EAAE;MACf;IACF;IAEA,OAAO;MACLJ,WAAW;MACXK,kBAAkB,EAAEL,WAAW,CAACK,kBAAkB;MAClDD,UAAU,EAAEA;IACd,CAAC;EACH;EAEQP,gBAAgBA,CAACH,IAAY,EAA4B;IAC/D,KAAK,MAAMY,WAAW,IAAI,IAAI,CAACd,YAAY,EAAE;MAC3C,MAAMe,cAAc,GAAGD,WAAW,CAACE,YAAY,CAACN,IAAI,CACjDO,SAAS,IAAKA,SAAS,CAACf,IAAI,CAACgB,WAAW,CAAC,CAAC,KAAKhB,IAAI,CAACgB,WAAW,CAAC,CACnE,CAAC;MAED,IAAIH,cAAc,EAAE;QAClB,OAAOA,cAAc,CAACX,YAAY;MACpC;IACF;IAEA,OAAOe,SAAS;EAClB;EAEQZ,aAAaA,CAACH,YAA0B,EAAED,KAAe,EAAU;IACzE,OACEC,YAAY,CAACgB,iBAAiB,EAAEC,GAAG,CAAEC,KAAK,IAAKnB,KAAK,CAACmB,KAAK,CAAC,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC,IACrE,EAAE;EAEN;AACF","ignoreList":[]}
1
+ {"version":3,"names":["parseMeasurement","FrameParser","constructor","mainServices","parse","uuid","frame","parsingModel","findParsingModel","caseValue","readCaseValue","parsingCase","cases","find","declared","parsedData","measurementTypeKey","mainService","characteristic","monitorUuids","monitored","toLowerCase","undefined","caseValuePosition","map","index","join"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/frame-parser.ts"],"mappings":";;AAMA,SAASA,gBAAgB,QAAQ,kCAA+B;;AAEhE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAW,CAAwB;EAC9CC,WAAWA,CAAkBC,YAA2C,EAAE;IAAA,KAA7CA,YAA2C,GAA3CA,YAA2C;EAAG;EAEpEC,KAAKA,CACVC,IAAY,EACZC,KAAe,EAC8B;IAC7C,MAAMC,YAAY,GAAG,IAAI,CAACC,gBAAgB,CAACH,IAAI,CAAC;IAEhD,IAAI,CAACE,YAAY,EAAE;MACjB;IACF;IAEA,MAAME,SAAS,GAAG,IAAI,CAACC,aAAa,CAACH,YAAY,EAAED,KAAK,CAAC;IAEzD,MAAMK,WAAW,GAAGJ,YAAY,CAACK,KAAK,EAAEC,IAAI,CACzCC,QAAQ,IAAKA,QAAQ,CAACL,SAAS,KAAKA,SACvC,CAAC;IAED,IAAI,CAACE,WAAW,EAAE;MAChB;IACF;IAEA,MAAMI,UAAU,GAAGf,gBAAgB,CAACM,KAAK,EAAEK,WAAW,CAAC;IAEvD,IAAI,CAACI,UAAU,EAAE;MACf;IACF;IAEA,OAAO;MACLJ,WAAW;MACXK,kBAAkB,EAAEL,WAAW,CAACK,kBAAkB;MAClDD,UAAU,EAAEA,UAAwC;MACpDT;IACF,CAAC;EACH;EAEQE,gBAAgBA,CAACH,IAAY,EAA4B;IAC/D,KAAK,MAAMY,WAAW,IAAI,IAAI,CAACd,YAAY,EAAE;MAC3C,MAAMe,cAAc,GAAGD,WAAW,CAACE,YAAY,CAACN,IAAI,CACjDO,SAAS,IAAKA,SAAS,CAACf,IAAI,CAACgB,WAAW,CAAC,CAAC,KAAKhB,IAAI,CAACgB,WAAW,CAAC,CACnE,CAAC;MAED,IAAIH,cAAc,EAAE;QAClB,OAAOA,cAAc,CAACX,YAAY;MACpC;IACF;IAEA,OAAOe,SAAS;EAClB;EAEQZ,aAAaA,CAACH,YAA0B,EAAED,KAAe,EAAU;IACzE,OACEC,YAAY,CAACgB,iBAAiB,EAAEC,GAAG,CAAEC,KAAK,IAAKnB,KAAK,CAACmB,KAAK,CAAC,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC,IACrE,EAAE;EAEN;AACF","ignoreList":[]}