@ovok/native 1.10.10 → 1.10.12

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 (418) hide show
  1. package/lib/commonjs/modules/bt-device/constants/device-instruction-pdfs.js +20 -1
  2. package/lib/commonjs/modules/bt-device/constants/device-instruction-pdfs.js.map +1 -1
  3. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-and-medical-variants.js +47 -0
  4. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-and-medical-variants.js.map +1 -0
  5. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-cofoe-variants.js +119 -0
  6. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-cofoe-variants.js.map +1 -0
  7. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-standard-variants.js +6 -0
  8. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-standard-variants.js.map +1 -1
  9. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-taidoc-variants.js +173 -0
  10. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-taidoc-variants.js.map +1 -0
  11. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-transtek-a6-variants.js +107 -0
  12. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-transtek-a6-variants.js.map +1 -0
  13. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-variants.js +10 -0
  14. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-variants.js.map +1 -1
  15. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-yonker-variants.js +113 -0
  16. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-yonker-variants.js.map +1 -0
  17. package/lib/commonjs/modules/bt-device/constants/supported-devices.js +5 -37
  18. package/lib/commonjs/modules/bt-device/constants/supported-devices.js.map +1 -1
  19. package/lib/commonjs/modules/bt-management/constants/and-medical-device-variants.js +39 -0
  20. package/lib/commonjs/modules/bt-management/constants/and-medical-device-variants.js.map +1 -0
  21. package/lib/commonjs/modules/bt-management/constants/built-in-measurement-types.js +86 -0
  22. package/lib/commonjs/modules/bt-management/constants/built-in-measurement-types.js.map +1 -0
  23. package/lib/commonjs/modules/bt-management/constants/cofoe-device-variants.js +101 -0
  24. package/lib/commonjs/modules/bt-management/constants/cofoe-device-variants.js.map +1 -0
  25. package/lib/commonjs/modules/bt-management/constants/device-variants.js +6 -1
  26. package/lib/commonjs/modules/bt-management/constants/device-variants.js.map +1 -1
  27. package/lib/commonjs/modules/bt-management/constants/integrated-devices-map.js +1 -1
  28. package/lib/commonjs/modules/bt-management/constants/integrated-devices-map.js.map +1 -1
  29. package/lib/commonjs/modules/bt-management/constants/standard-device-variants.js +5 -0
  30. package/lib/commonjs/modules/bt-management/constants/standard-device-variants.js.map +1 -1
  31. package/lib/commonjs/modules/bt-management/constants/taidoc-device-variants.js +144 -0
  32. package/lib/commonjs/modules/bt-management/constants/taidoc-device-variants.js.map +1 -0
  33. package/lib/commonjs/modules/bt-management/constants/transtek-a6-device-variants.js +89 -0
  34. package/lib/commonjs/modules/bt-management/constants/transtek-a6-device-variants.js.map +1 -0
  35. package/lib/commonjs/modules/bt-management/constants/yonker-device-variants.js +93 -0
  36. package/lib/commonjs/modules/bt-management/constants/yonker-device-variants.js.map +1 -0
  37. package/lib/commonjs/modules/bt-management/core/resolve-device-key.js +6 -0
  38. package/lib/commonjs/modules/bt-management/core/resolve-device-key.js.map +1 -1
  39. package/lib/commonjs/modules/bt-management/services/background-sync/background-service-uuids.js +18 -0
  40. package/lib/commonjs/modules/bt-management/services/background-sync/background-service-uuids.js.map +1 -1
  41. package/lib/commonjs/modules/bt-management/services/device-classes.js +27 -1
  42. package/lib/commonjs/modules/bt-management/services/device-classes.js.map +1 -1
  43. package/lib/commonjs/modules/bt-management/services/device-creator.js +5 -3
  44. package/lib/commonjs/modules/bt-management/services/device-creator.js.map +1 -1
  45. package/lib/commonjs/modules/bt-management/services/devices/and-medical/and-medical.device.js +61 -0
  46. package/lib/commonjs/modules/bt-management/services/devices/and-medical/and-medical.device.js.map +1 -0
  47. package/lib/commonjs/modules/bt-management/services/devices/and-medical/and-medical.protocol.js +113 -0
  48. package/lib/commonjs/modules/bt-management/services/devices/and-medical/and-medical.protocol.js.map +1 -0
  49. package/lib/commonjs/modules/bt-management/services/devices/and-medical/and-medical.sequencer.js +77 -0
  50. package/lib/commonjs/modules/bt-management/services/devices/and-medical/and-medical.sequencer.js.map +1 -0
  51. package/lib/commonjs/modules/bt-management/services/devices/aoj/aoj-70b.device.js +1 -1
  52. package/lib/commonjs/modules/bt-management/services/devices/aoj/aoj-70b.device.js.map +1 -1
  53. package/lib/commonjs/modules/bt-management/services/devices/blood-glucose/blood-glucose.device.js +7 -25
  54. package/lib/commonjs/modules/bt-management/services/devices/blood-glucose/blood-glucose.device.js.map +1 -1
  55. package/lib/commonjs/modules/bt-management/services/devices/bt-data-processor.js +3 -2
  56. package/lib/commonjs/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
  57. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js +7 -2
  58. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  59. package/lib/commonjs/modules/bt-management/services/devices/cofoe/cofoe-bp.sequencer.js +86 -0
  60. package/lib/commonjs/modules/bt-management/services/devices/cofoe/cofoe-bp.sequencer.js.map +1 -0
  61. package/lib/commonjs/modules/bt-management/services/devices/cofoe/cofoe-glucose.sequencer.js +155 -0
  62. package/lib/commonjs/modules/bt-management/services/devices/cofoe/cofoe-glucose.sequencer.js.map +1 -0
  63. package/lib/commonjs/modules/bt-management/services/devices/cofoe/cofoe-thermometer.sequencer.js +33 -0
  64. package/lib/commonjs/modules/bt-management/services/devices/cofoe/cofoe-thermometer.sequencer.js.map +1 -0
  65. package/lib/commonjs/modules/bt-management/services/devices/cofoe/cofoe.device.js +87 -0
  66. package/lib/commonjs/modules/bt-management/services/devices/cofoe/cofoe.device.js.map +1 -0
  67. package/lib/commonjs/modules/bt-management/services/devices/cofoe/cofoe.protocol.js +185 -0
  68. package/lib/commonjs/modules/bt-management/services/devices/cofoe/cofoe.protocol.js.map +1 -0
  69. package/lib/commonjs/modules/bt-management/services/devices/cofoe/cofoe.records.js +86 -0
  70. package/lib/commonjs/modules/bt-management/services/devices/cofoe/cofoe.records.js.map +1 -0
  71. package/lib/commonjs/modules/bt-management/services/devices/jumper/jumper.device.js +1 -1
  72. package/lib/commonjs/modules/bt-management/services/devices/jumper/jumper.device.js.map +1 -1
  73. package/lib/commonjs/modules/bt-management/services/devices/live-oximeter.sequencer.js +10 -6
  74. package/lib/commonjs/modules/bt-management/services/devices/live-oximeter.sequencer.js.map +1 -1
  75. package/lib/commonjs/modules/bt-management/services/devices/taidoc/taidoc.device.js +50 -0
  76. package/lib/commonjs/modules/bt-management/services/devices/taidoc/taidoc.device.js.map +1 -0
  77. package/lib/commonjs/modules/bt-management/services/devices/taidoc/taidoc.protocol.js +127 -0
  78. package/lib/commonjs/modules/bt-management/services/devices/taidoc/taidoc.protocol.js.map +1 -0
  79. package/lib/commonjs/modules/bt-management/services/devices/taidoc/taidoc.records.js +181 -0
  80. package/lib/commonjs/modules/bt-management/services/devices/taidoc/taidoc.records.js.map +1 -0
  81. package/lib/commonjs/modules/bt-management/services/devices/taidoc/taidoc.sequencer.js +139 -0
  82. package/lib/commonjs/modules/bt-management/services/devices/taidoc/taidoc.sequencer.js.map +1 -0
  83. package/lib/commonjs/modules/bt-management/services/devices/transtek/a6-scale.device.js +50 -0
  84. package/lib/commonjs/modules/bt-management/services/devices/transtek/a6-scale.device.js.map +1 -0
  85. package/lib/commonjs/modules/bt-management/services/devices/transtek/a6-scale.measurements.js +78 -0
  86. package/lib/commonjs/modules/bt-management/services/devices/transtek/a6-scale.measurements.js.map +1 -0
  87. package/lib/commonjs/modules/bt-management/services/devices/transtek/a6-scale.protocol.js +134 -0
  88. package/lib/commonjs/modules/bt-management/services/devices/transtek/a6-scale.protocol.js.map +1 -0
  89. package/lib/commonjs/modules/bt-management/services/devices/transtek/a6-scale.sequencer.js +102 -0
  90. package/lib/commonjs/modules/bt-management/services/devices/transtek/a6-scale.sequencer.js.map +1 -0
  91. package/lib/commonjs/modules/bt-management/services/devices/transtek/mambo-a5.device.js +51 -0
  92. package/lib/commonjs/modules/bt-management/services/devices/transtek/mambo-a5.device.js.map +1 -0
  93. package/lib/commonjs/modules/bt-management/services/devices/transtek/mambo-a5.measurements.js +48 -0
  94. package/lib/commonjs/modules/bt-management/services/devices/transtek/mambo-a5.measurements.js.map +1 -0
  95. package/lib/commonjs/modules/bt-management/services/devices/transtek/mambo-a5.protocol.js +181 -0
  96. package/lib/commonjs/modules/bt-management/services/devices/transtek/mambo-a5.protocol.js.map +1 -0
  97. package/lib/commonjs/modules/bt-management/services/devices/transtek/mambo-a5.sequencer.js +73 -0
  98. package/lib/commonjs/modules/bt-management/services/devices/transtek/mambo-a5.sequencer.js.map +1 -0
  99. package/lib/commonjs/modules/bt-management/services/devices/yonker/yonker.device.js +90 -0
  100. package/lib/commonjs/modules/bt-management/services/devices/yonker/yonker.device.js.map +1 -0
  101. package/lib/commonjs/modules/bt-management/services/devices/yonker/yonker.protocol.js +202 -0
  102. package/lib/commonjs/modules/bt-management/services/devices/yonker/yonker.protocol.js.map +1 -0
  103. package/lib/commonjs/modules/bt-management/services/devices/yonker/yonker.sequencer.js +137 -0
  104. package/lib/commonjs/modules/bt-management/services/devices/yonker/yonker.sequencer.js.map +1 -0
  105. package/lib/commonjs/modules/bt-management/types/clock-sync.js +2 -0
  106. package/lib/commonjs/modules/bt-management/types/clock-sync.js.map +1 -1
  107. package/lib/commonjs/modules/bt-management/types/integrated-devices.js +19 -0
  108. package/lib/commonjs/modules/bt-management/types/integrated-devices.js.map +1 -1
  109. package/lib/module/modules/bt-device/constants/device-instruction-pdfs.js +20 -1
  110. package/lib/module/modules/bt-device/constants/device-instruction-pdfs.js.map +1 -1
  111. package/lib/module/modules/bt-device/constants/supported-device-catalog-and-medical-variants.js +45 -0
  112. package/lib/module/modules/bt-device/constants/supported-device-catalog-and-medical-variants.js.map +1 -0
  113. package/lib/module/modules/bt-device/constants/supported-device-catalog-cofoe-variants.js +117 -0
  114. package/lib/module/modules/bt-device/constants/supported-device-catalog-cofoe-variants.js.map +1 -0
  115. package/lib/module/modules/bt-device/constants/supported-device-catalog-standard-variants.js +6 -0
  116. package/lib/module/modules/bt-device/constants/supported-device-catalog-standard-variants.js.map +1 -1
  117. package/lib/module/modules/bt-device/constants/supported-device-catalog-taidoc-variants.js +171 -0
  118. package/lib/module/modules/bt-device/constants/supported-device-catalog-taidoc-variants.js.map +1 -0
  119. package/lib/module/modules/bt-device/constants/supported-device-catalog-transtek-a6-variants.js +105 -0
  120. package/lib/module/modules/bt-device/constants/supported-device-catalog-transtek-a6-variants.js.map +1 -0
  121. package/lib/module/modules/bt-device/constants/supported-device-catalog-variants.js +10 -0
  122. package/lib/module/modules/bt-device/constants/supported-device-catalog-variants.js.map +1 -1
  123. package/lib/module/modules/bt-device/constants/supported-device-catalog-yonker-variants.js +111 -0
  124. package/lib/module/modules/bt-device/constants/supported-device-catalog-yonker-variants.js.map +1 -0
  125. package/lib/module/modules/bt-device/constants/supported-devices.js +5 -37
  126. package/lib/module/modules/bt-device/constants/supported-devices.js.map +1 -1
  127. package/lib/module/modules/bt-management/constants/and-medical-device-variants.js +37 -0
  128. package/lib/module/modules/bt-management/constants/and-medical-device-variants.js.map +1 -0
  129. package/lib/module/modules/bt-management/constants/built-in-measurement-types.js +84 -0
  130. package/lib/module/modules/bt-management/constants/built-in-measurement-types.js.map +1 -0
  131. package/lib/module/modules/bt-management/constants/cofoe-device-variants.js +99 -0
  132. package/lib/module/modules/bt-management/constants/cofoe-device-variants.js.map +1 -0
  133. package/lib/module/modules/bt-management/constants/device-variants.js +6 -1
  134. package/lib/module/modules/bt-management/constants/device-variants.js.map +1 -1
  135. package/lib/module/modules/bt-management/constants/integrated-devices-map.js +1 -1
  136. package/lib/module/modules/bt-management/constants/integrated-devices-map.js.map +1 -1
  137. package/lib/module/modules/bt-management/constants/standard-device-variants.js +5 -0
  138. package/lib/module/modules/bt-management/constants/standard-device-variants.js.map +1 -1
  139. package/lib/module/modules/bt-management/constants/taidoc-device-variants.js +142 -0
  140. package/lib/module/modules/bt-management/constants/taidoc-device-variants.js.map +1 -0
  141. package/lib/module/modules/bt-management/constants/transtek-a6-device-variants.js +87 -0
  142. package/lib/module/modules/bt-management/constants/transtek-a6-device-variants.js.map +1 -0
  143. package/lib/module/modules/bt-management/constants/yonker-device-variants.js +91 -0
  144. package/lib/module/modules/bt-management/constants/yonker-device-variants.js.map +1 -0
  145. package/lib/module/modules/bt-management/core/resolve-device-key.js +6 -0
  146. package/lib/module/modules/bt-management/core/resolve-device-key.js.map +1 -1
  147. package/lib/module/modules/bt-management/services/background-sync/background-service-uuids.js +18 -0
  148. package/lib/module/modules/bt-management/services/background-sync/background-service-uuids.js.map +1 -1
  149. package/lib/module/modules/bt-management/services/device-classes.js +27 -1
  150. package/lib/module/modules/bt-management/services/device-classes.js.map +1 -1
  151. package/lib/module/modules/bt-management/services/device-creator.js +5 -3
  152. package/lib/module/modules/bt-management/services/device-creator.js.map +1 -1
  153. package/lib/module/modules/bt-management/services/devices/and-medical/and-medical.device.js +57 -0
  154. package/lib/module/modules/bt-management/services/devices/and-medical/and-medical.device.js.map +1 -0
  155. package/lib/module/modules/bt-management/services/devices/and-medical/and-medical.protocol.js +106 -0
  156. package/lib/module/modules/bt-management/services/devices/and-medical/and-medical.protocol.js.map +1 -0
  157. package/lib/module/modules/bt-management/services/devices/and-medical/and-medical.sequencer.js +74 -0
  158. package/lib/module/modules/bt-management/services/devices/and-medical/and-medical.sequencer.js.map +1 -0
  159. package/lib/module/modules/bt-management/services/devices/aoj/aoj-70b.device.js +2 -2
  160. package/lib/module/modules/bt-management/services/devices/aoj/aoj-70b.device.js.map +1 -1
  161. package/lib/module/modules/bt-management/services/devices/blood-glucose/blood-glucose.device.js +6 -24
  162. package/lib/module/modules/bt-management/services/devices/blood-glucose/blood-glucose.device.js.map +1 -1
  163. package/lib/module/modules/bt-management/services/devices/bt-data-processor.js +3 -2
  164. package/lib/module/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
  165. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js +7 -2
  166. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  167. package/lib/module/modules/bt-management/services/devices/cofoe/cofoe-bp.sequencer.js +82 -0
  168. package/lib/module/modules/bt-management/services/devices/cofoe/cofoe-bp.sequencer.js.map +1 -0
  169. package/lib/module/modules/bt-management/services/devices/cofoe/cofoe-glucose.sequencer.js +148 -0
  170. package/lib/module/modules/bt-management/services/devices/cofoe/cofoe-glucose.sequencer.js.map +1 -0
  171. package/lib/module/modules/bt-management/services/devices/cofoe/cofoe-thermometer.sequencer.js +30 -0
  172. package/lib/module/modules/bt-management/services/devices/cofoe/cofoe-thermometer.sequencer.js.map +1 -0
  173. package/lib/module/modules/bt-management/services/devices/cofoe/cofoe.device.js +83 -0
  174. package/lib/module/modules/bt-management/services/devices/cofoe/cofoe.device.js.map +1 -0
  175. package/lib/module/modules/bt-management/services/devices/cofoe/cofoe.protocol.js +173 -0
  176. package/lib/module/modules/bt-management/services/devices/cofoe/cofoe.protocol.js.map +1 -0
  177. package/lib/module/modules/bt-management/services/devices/cofoe/cofoe.records.js +78 -0
  178. package/lib/module/modules/bt-management/services/devices/cofoe/cofoe.records.js.map +1 -0
  179. package/lib/module/modules/bt-management/services/devices/jumper/jumper.device.js +2 -2
  180. package/lib/module/modules/bt-management/services/devices/jumper/jumper.device.js.map +1 -1
  181. package/lib/module/modules/bt-management/services/devices/live-oximeter.sequencer.js +10 -6
  182. package/lib/module/modules/bt-management/services/devices/live-oximeter.sequencer.js.map +1 -1
  183. package/lib/module/modules/bt-management/services/devices/taidoc/taidoc.device.js +46 -0
  184. package/lib/module/modules/bt-management/services/devices/taidoc/taidoc.device.js.map +1 -0
  185. package/lib/module/modules/bt-management/services/devices/taidoc/taidoc.protocol.js +114 -0
  186. package/lib/module/modules/bt-management/services/devices/taidoc/taidoc.protocol.js.map +1 -0
  187. package/lib/module/modules/bt-management/services/devices/taidoc/taidoc.records.js +168 -0
  188. package/lib/module/modules/bt-management/services/devices/taidoc/taidoc.records.js.map +1 -0
  189. package/lib/module/modules/bt-management/services/devices/taidoc/taidoc.sequencer.js +136 -0
  190. package/lib/module/modules/bt-management/services/devices/taidoc/taidoc.sequencer.js.map +1 -0
  191. package/lib/module/modules/bt-management/services/devices/transtek/a6-scale.device.js +45 -0
  192. package/lib/module/modules/bt-management/services/devices/transtek/a6-scale.device.js.map +1 -0
  193. package/lib/module/modules/bt-management/services/devices/transtek/a6-scale.measurements.js +73 -0
  194. package/lib/module/modules/bt-management/services/devices/transtek/a6-scale.measurements.js.map +1 -0
  195. package/lib/module/modules/bt-management/services/devices/transtek/a6-scale.protocol.js +121 -0
  196. package/lib/module/modules/bt-management/services/devices/transtek/a6-scale.protocol.js.map +1 -0
  197. package/lib/module/modules/bt-management/services/devices/transtek/a6-scale.sequencer.js +97 -0
  198. package/lib/module/modules/bt-management/services/devices/transtek/a6-scale.sequencer.js.map +1 -0
  199. package/lib/module/modules/bt-management/services/devices/transtek/mambo-a5.device.js +46 -0
  200. package/lib/module/modules/bt-management/services/devices/transtek/mambo-a5.device.js.map +1 -0
  201. package/lib/module/modules/bt-management/services/devices/transtek/mambo-a5.measurements.js +43 -0
  202. package/lib/module/modules/bt-management/services/devices/transtek/mambo-a5.measurements.js.map +1 -0
  203. package/lib/module/modules/bt-management/services/devices/transtek/mambo-a5.protocol.js +174 -0
  204. package/lib/module/modules/bt-management/services/devices/transtek/mambo-a5.protocol.js.map +1 -0
  205. package/lib/module/modules/bt-management/services/devices/transtek/mambo-a5.sequencer.js +68 -0
  206. package/lib/module/modules/bt-management/services/devices/transtek/mambo-a5.sequencer.js.map +1 -0
  207. package/lib/module/modules/bt-management/services/devices/yonker/yonker.device.js +86 -0
  208. package/lib/module/modules/bt-management/services/devices/yonker/yonker.device.js.map +1 -0
  209. package/lib/module/modules/bt-management/services/devices/yonker/yonker.protocol.js +186 -0
  210. package/lib/module/modules/bt-management/services/devices/yonker/yonker.protocol.js.map +1 -0
  211. package/lib/module/modules/bt-management/services/devices/yonker/yonker.sequencer.js +133 -0
  212. package/lib/module/modules/bt-management/services/devices/yonker/yonker.sequencer.js.map +1 -0
  213. package/lib/module/modules/bt-management/types/clock-sync.js +2 -0
  214. package/lib/module/modules/bt-management/types/clock-sync.js.map +1 -1
  215. package/lib/module/modules/bt-management/types/device-measurement-map.js.map +1 -1
  216. package/lib/module/modules/bt-management/types/integrated-devices.js +19 -0
  217. package/lib/module/modules/bt-management/types/integrated-devices.js.map +1 -1
  218. package/lib/typescript/commonjs/src/modules/auth/hooks/use-sign-in.d.ts +1 -1
  219. package/lib/typescript/commonjs/src/modules/bt-device/constants/device-instruction-pdfs.d.ts.map +1 -1
  220. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-and-medical-variants.d.ts +5 -0
  221. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-and-medical-variants.d.ts.map +1 -0
  222. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-cofoe-variants.d.ts +5 -0
  223. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-cofoe-variants.d.ts.map +1 -0
  224. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-standard-variants.d.ts.map +1 -1
  225. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-taidoc-variants.d.ts +5 -0
  226. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-taidoc-variants.d.ts.map +1 -0
  227. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-transtek-a6-variants.d.ts +5 -0
  228. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-transtek-a6-variants.d.ts.map +1 -0
  229. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-variants.d.ts.map +1 -1
  230. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-yonker-variants.d.ts +5 -0
  231. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-yonker-variants.d.ts.map +1 -0
  232. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-devices.d.ts.map +1 -1
  233. package/lib/typescript/commonjs/src/modules/bt-management/constants/and-medical-device-variants.d.ts +5 -0
  234. package/lib/typescript/commonjs/src/modules/bt-management/constants/and-medical-device-variants.d.ts.map +1 -0
  235. package/lib/typescript/commonjs/src/modules/bt-management/constants/built-in-measurement-types.d.ts +9 -0
  236. package/lib/typescript/commonjs/src/modules/bt-management/constants/built-in-measurement-types.d.ts.map +1 -0
  237. package/lib/typescript/commonjs/src/modules/bt-management/constants/cofoe-device-variants.d.ts +5 -0
  238. package/lib/typescript/commonjs/src/modules/bt-management/constants/cofoe-device-variants.d.ts.map +1 -0
  239. package/lib/typescript/commonjs/src/modules/bt-management/constants/device-variants.d.ts.map +1 -1
  240. package/lib/typescript/commonjs/src/modules/bt-management/constants/integrated-devices-map.d.ts.map +1 -1
  241. package/lib/typescript/commonjs/src/modules/bt-management/constants/standard-device-variants.d.ts.map +1 -1
  242. package/lib/typescript/commonjs/src/modules/bt-management/constants/taidoc-device-variants.d.ts +5 -0
  243. package/lib/typescript/commonjs/src/modules/bt-management/constants/taidoc-device-variants.d.ts.map +1 -0
  244. package/lib/typescript/commonjs/src/modules/bt-management/constants/transtek-a6-device-variants.d.ts +5 -0
  245. package/lib/typescript/commonjs/src/modules/bt-management/constants/transtek-a6-device-variants.d.ts.map +1 -0
  246. package/lib/typescript/commonjs/src/modules/bt-management/constants/yonker-device-variants.d.ts +5 -0
  247. package/lib/typescript/commonjs/src/modules/bt-management/constants/yonker-device-variants.d.ts.map +1 -0
  248. package/lib/typescript/commonjs/src/modules/bt-management/core/resolve-device-key.d.ts.map +1 -1
  249. package/lib/typescript/commonjs/src/modules/bt-management/services/background-sync/background-service-uuids.d.ts.map +1 -1
  250. package/lib/typescript/commonjs/src/modules/bt-management/services/device-classes.d.ts +26 -0
  251. package/lib/typescript/commonjs/src/modules/bt-management/services/device-classes.d.ts.map +1 -1
  252. package/lib/typescript/commonjs/src/modules/bt-management/services/device-creator.d.ts.map +1 -1
  253. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/and-medical/and-medical.device.d.ts +18 -0
  254. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/and-medical/and-medical.device.d.ts.map +1 -0
  255. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/and-medical/and-medical.protocol.d.ts +30 -0
  256. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/and-medical/and-medical.protocol.d.ts.map +1 -0
  257. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/and-medical/and-medical.sequencer.d.ts +26 -0
  258. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/and-medical/and-medical.sequencer.d.ts.map +1 -0
  259. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/blood-glucose/blood-glucose.device.d.ts.map +1 -1
  260. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-data-processor.d.ts.map +1 -1
  261. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts +4 -1
  262. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  263. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/cofoe/cofoe-bp.sequencer.d.ts +32 -0
  264. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/cofoe/cofoe-bp.sequencer.d.ts.map +1 -0
  265. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/cofoe/cofoe-glucose.sequencer.d.ts +46 -0
  266. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/cofoe/cofoe-glucose.sequencer.d.ts.map +1 -0
  267. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/cofoe/cofoe-thermometer.sequencer.d.ts +15 -0
  268. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/cofoe/cofoe-thermometer.sequencer.d.ts.map +1 -0
  269. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/cofoe/cofoe.device.d.ts +18 -0
  270. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/cofoe/cofoe.device.d.ts.map +1 -0
  271. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/cofoe/cofoe.protocol.d.ts +75 -0
  272. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/cofoe/cofoe.protocol.d.ts.map +1 -0
  273. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/cofoe/cofoe.records.d.ts +22 -0
  274. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/cofoe/cofoe.records.d.ts.map +1 -0
  275. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/jumper/jumper.device.d.ts.map +1 -1
  276. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/live-oximeter.sequencer.d.ts +6 -2
  277. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/live-oximeter.sequencer.d.ts.map +1 -1
  278. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/taidoc/taidoc.device.d.ts +16 -0
  279. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/taidoc/taidoc.device.d.ts.map +1 -0
  280. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/taidoc/taidoc.protocol.d.ts +50 -0
  281. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/taidoc/taidoc.protocol.d.ts.map +1 -0
  282. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/taidoc/taidoc.records.d.ts +40 -0
  283. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/taidoc/taidoc.records.d.ts.map +1 -0
  284. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/taidoc/taidoc.sequencer.d.ts +38 -0
  285. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/taidoc/taidoc.sequencer.d.ts.map +1 -0
  286. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/a6-scale.device.d.ts +16 -0
  287. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/a6-scale.device.d.ts.map +1 -0
  288. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/a6-scale.measurements.d.ts +5 -0
  289. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/a6-scale.measurements.d.ts.map +1 -0
  290. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/a6-scale.protocol.d.ts +22 -0
  291. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/a6-scale.protocol.d.ts.map +1 -0
  292. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/a6-scale.sequencer.d.ts +28 -0
  293. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/a6-scale.sequencer.d.ts.map +1 -0
  294. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/mambo-a5.device.d.ts +16 -0
  295. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/mambo-a5.device.d.ts.map +1 -0
  296. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/mambo-a5.measurements.d.ts +6 -0
  297. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/mambo-a5.measurements.d.ts.map +1 -0
  298. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/mambo-a5.protocol.d.ts +18 -0
  299. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/mambo-a5.protocol.d.ts.map +1 -0
  300. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/mambo-a5.sequencer.d.ts +21 -0
  301. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/transtek/mambo-a5.sequencer.d.ts.map +1 -0
  302. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/yonker/yonker.device.d.ts +21 -0
  303. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/yonker/yonker.device.d.ts.map +1 -0
  304. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/yonker/yonker.protocol.d.ts +62 -0
  305. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/yonker/yonker.protocol.d.ts.map +1 -0
  306. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/yonker/yonker.sequencer.d.ts +46 -0
  307. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/yonker/yonker.sequencer.d.ts.map +1 -0
  308. package/lib/typescript/commonjs/src/modules/bt-management/types/clock-sync.d.ts.map +1 -1
  309. package/lib/typescript/commonjs/src/modules/bt-management/types/device-data.d.ts +1 -0
  310. package/lib/typescript/commonjs/src/modules/bt-management/types/device-data.d.ts.map +1 -1
  311. package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts +20 -1
  312. package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
  313. package/lib/typescript/commonjs/src/modules/bt-management/types/frame-reader.d.ts +2 -1
  314. package/lib/typescript/commonjs/src/modules/bt-management/types/frame-reader.d.ts.map +1 -1
  315. package/lib/typescript/commonjs/src/modules/bt-management/types/integrated-devices.d.ts +20 -1
  316. package/lib/typescript/commonjs/src/modules/bt-management/types/integrated-devices.d.ts.map +1 -1
  317. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-samples-from-health.d.ts +2 -2
  318. package/lib/typescript/module/src/modules/auth/hooks/use-sign-in.d.ts +1 -1
  319. package/lib/typescript/module/src/modules/bt-device/constants/device-instruction-pdfs.d.ts.map +1 -1
  320. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-and-medical-variants.d.ts +5 -0
  321. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-and-medical-variants.d.ts.map +1 -0
  322. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-cofoe-variants.d.ts +5 -0
  323. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-cofoe-variants.d.ts.map +1 -0
  324. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-standard-variants.d.ts.map +1 -1
  325. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-taidoc-variants.d.ts +5 -0
  326. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-taidoc-variants.d.ts.map +1 -0
  327. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-transtek-a6-variants.d.ts +5 -0
  328. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-transtek-a6-variants.d.ts.map +1 -0
  329. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-variants.d.ts.map +1 -1
  330. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-yonker-variants.d.ts +5 -0
  331. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-yonker-variants.d.ts.map +1 -0
  332. package/lib/typescript/module/src/modules/bt-device/constants/supported-devices.d.ts.map +1 -1
  333. package/lib/typescript/module/src/modules/bt-management/constants/and-medical-device-variants.d.ts +5 -0
  334. package/lib/typescript/module/src/modules/bt-management/constants/and-medical-device-variants.d.ts.map +1 -0
  335. package/lib/typescript/module/src/modules/bt-management/constants/built-in-measurement-types.d.ts +9 -0
  336. package/lib/typescript/module/src/modules/bt-management/constants/built-in-measurement-types.d.ts.map +1 -0
  337. package/lib/typescript/module/src/modules/bt-management/constants/cofoe-device-variants.d.ts +5 -0
  338. package/lib/typescript/module/src/modules/bt-management/constants/cofoe-device-variants.d.ts.map +1 -0
  339. package/lib/typescript/module/src/modules/bt-management/constants/device-variants.d.ts.map +1 -1
  340. package/lib/typescript/module/src/modules/bt-management/constants/integrated-devices-map.d.ts.map +1 -1
  341. package/lib/typescript/module/src/modules/bt-management/constants/standard-device-variants.d.ts.map +1 -1
  342. package/lib/typescript/module/src/modules/bt-management/constants/taidoc-device-variants.d.ts +5 -0
  343. package/lib/typescript/module/src/modules/bt-management/constants/taidoc-device-variants.d.ts.map +1 -0
  344. package/lib/typescript/module/src/modules/bt-management/constants/transtek-a6-device-variants.d.ts +5 -0
  345. package/lib/typescript/module/src/modules/bt-management/constants/transtek-a6-device-variants.d.ts.map +1 -0
  346. package/lib/typescript/module/src/modules/bt-management/constants/yonker-device-variants.d.ts +5 -0
  347. package/lib/typescript/module/src/modules/bt-management/constants/yonker-device-variants.d.ts.map +1 -0
  348. package/lib/typescript/module/src/modules/bt-management/core/resolve-device-key.d.ts.map +1 -1
  349. package/lib/typescript/module/src/modules/bt-management/services/background-sync/background-service-uuids.d.ts.map +1 -1
  350. package/lib/typescript/module/src/modules/bt-management/services/device-classes.d.ts +26 -0
  351. package/lib/typescript/module/src/modules/bt-management/services/device-classes.d.ts.map +1 -1
  352. package/lib/typescript/module/src/modules/bt-management/services/device-creator.d.ts.map +1 -1
  353. package/lib/typescript/module/src/modules/bt-management/services/devices/and-medical/and-medical.device.d.ts +18 -0
  354. package/lib/typescript/module/src/modules/bt-management/services/devices/and-medical/and-medical.device.d.ts.map +1 -0
  355. package/lib/typescript/module/src/modules/bt-management/services/devices/and-medical/and-medical.protocol.d.ts +30 -0
  356. package/lib/typescript/module/src/modules/bt-management/services/devices/and-medical/and-medical.protocol.d.ts.map +1 -0
  357. package/lib/typescript/module/src/modules/bt-management/services/devices/and-medical/and-medical.sequencer.d.ts +26 -0
  358. package/lib/typescript/module/src/modules/bt-management/services/devices/and-medical/and-medical.sequencer.d.ts.map +1 -0
  359. package/lib/typescript/module/src/modules/bt-management/services/devices/blood-glucose/blood-glucose.device.d.ts.map +1 -1
  360. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-data-processor.d.ts.map +1 -1
  361. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts +4 -1
  362. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  363. package/lib/typescript/module/src/modules/bt-management/services/devices/cofoe/cofoe-bp.sequencer.d.ts +32 -0
  364. package/lib/typescript/module/src/modules/bt-management/services/devices/cofoe/cofoe-bp.sequencer.d.ts.map +1 -0
  365. package/lib/typescript/module/src/modules/bt-management/services/devices/cofoe/cofoe-glucose.sequencer.d.ts +46 -0
  366. package/lib/typescript/module/src/modules/bt-management/services/devices/cofoe/cofoe-glucose.sequencer.d.ts.map +1 -0
  367. package/lib/typescript/module/src/modules/bt-management/services/devices/cofoe/cofoe-thermometer.sequencer.d.ts +15 -0
  368. package/lib/typescript/module/src/modules/bt-management/services/devices/cofoe/cofoe-thermometer.sequencer.d.ts.map +1 -0
  369. package/lib/typescript/module/src/modules/bt-management/services/devices/cofoe/cofoe.device.d.ts +18 -0
  370. package/lib/typescript/module/src/modules/bt-management/services/devices/cofoe/cofoe.device.d.ts.map +1 -0
  371. package/lib/typescript/module/src/modules/bt-management/services/devices/cofoe/cofoe.protocol.d.ts +75 -0
  372. package/lib/typescript/module/src/modules/bt-management/services/devices/cofoe/cofoe.protocol.d.ts.map +1 -0
  373. package/lib/typescript/module/src/modules/bt-management/services/devices/cofoe/cofoe.records.d.ts +22 -0
  374. package/lib/typescript/module/src/modules/bt-management/services/devices/cofoe/cofoe.records.d.ts.map +1 -0
  375. package/lib/typescript/module/src/modules/bt-management/services/devices/jumper/jumper.device.d.ts.map +1 -1
  376. package/lib/typescript/module/src/modules/bt-management/services/devices/live-oximeter.sequencer.d.ts +6 -2
  377. package/lib/typescript/module/src/modules/bt-management/services/devices/live-oximeter.sequencer.d.ts.map +1 -1
  378. package/lib/typescript/module/src/modules/bt-management/services/devices/taidoc/taidoc.device.d.ts +16 -0
  379. package/lib/typescript/module/src/modules/bt-management/services/devices/taidoc/taidoc.device.d.ts.map +1 -0
  380. package/lib/typescript/module/src/modules/bt-management/services/devices/taidoc/taidoc.protocol.d.ts +50 -0
  381. package/lib/typescript/module/src/modules/bt-management/services/devices/taidoc/taidoc.protocol.d.ts.map +1 -0
  382. package/lib/typescript/module/src/modules/bt-management/services/devices/taidoc/taidoc.records.d.ts +40 -0
  383. package/lib/typescript/module/src/modules/bt-management/services/devices/taidoc/taidoc.records.d.ts.map +1 -0
  384. package/lib/typescript/module/src/modules/bt-management/services/devices/taidoc/taidoc.sequencer.d.ts +38 -0
  385. package/lib/typescript/module/src/modules/bt-management/services/devices/taidoc/taidoc.sequencer.d.ts.map +1 -0
  386. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/a6-scale.device.d.ts +16 -0
  387. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/a6-scale.device.d.ts.map +1 -0
  388. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/a6-scale.measurements.d.ts +5 -0
  389. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/a6-scale.measurements.d.ts.map +1 -0
  390. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/a6-scale.protocol.d.ts +22 -0
  391. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/a6-scale.protocol.d.ts.map +1 -0
  392. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/a6-scale.sequencer.d.ts +28 -0
  393. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/a6-scale.sequencer.d.ts.map +1 -0
  394. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/mambo-a5.device.d.ts +16 -0
  395. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/mambo-a5.device.d.ts.map +1 -0
  396. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/mambo-a5.measurements.d.ts +6 -0
  397. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/mambo-a5.measurements.d.ts.map +1 -0
  398. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/mambo-a5.protocol.d.ts +18 -0
  399. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/mambo-a5.protocol.d.ts.map +1 -0
  400. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/mambo-a5.sequencer.d.ts +21 -0
  401. package/lib/typescript/module/src/modules/bt-management/services/devices/transtek/mambo-a5.sequencer.d.ts.map +1 -0
  402. package/lib/typescript/module/src/modules/bt-management/services/devices/yonker/yonker.device.d.ts +21 -0
  403. package/lib/typescript/module/src/modules/bt-management/services/devices/yonker/yonker.device.d.ts.map +1 -0
  404. package/lib/typescript/module/src/modules/bt-management/services/devices/yonker/yonker.protocol.d.ts +62 -0
  405. package/lib/typescript/module/src/modules/bt-management/services/devices/yonker/yonker.protocol.d.ts.map +1 -0
  406. package/lib/typescript/module/src/modules/bt-management/services/devices/yonker/yonker.sequencer.d.ts +46 -0
  407. package/lib/typescript/module/src/modules/bt-management/services/devices/yonker/yonker.sequencer.d.ts.map +1 -0
  408. package/lib/typescript/module/src/modules/bt-management/types/clock-sync.d.ts.map +1 -1
  409. package/lib/typescript/module/src/modules/bt-management/types/device-data.d.ts +1 -0
  410. package/lib/typescript/module/src/modules/bt-management/types/device-data.d.ts.map +1 -1
  411. package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts +20 -1
  412. package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
  413. package/lib/typescript/module/src/modules/bt-management/types/frame-reader.d.ts +2 -1
  414. package/lib/typescript/module/src/modules/bt-management/types/frame-reader.d.ts.map +1 -1
  415. package/lib/typescript/module/src/modules/bt-management/types/integrated-devices.d.ts +20 -1
  416. package/lib/typescript/module/src/modules/bt-management/types/integrated-devices.d.ts.map +1 -1
  417. package/lib/typescript/module/src/modules/data-sync/utils/get-samples-from-health.d.ts +2 -2
  418. package/package.json +1 -1
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+
3
+ /* eslint-disable import/group-exports */
4
+ import { MeasurementTypeKey } from "@ovok/core";
5
+ import { CaseType } from "../../../types/case-type.js";
6
+ import { cgh25Frame, cgh25SetTime, COFOE_GATT, kfb06Frame, kfb06SetTime, unframe } from "./cofoe.protocol.js";
7
+ import { readCgh25Glucose, readKfb06Glucose } from "./cofoe.records.js";
8
+ const command = frame => ({
9
+ serviceUuid: COFOE_GATT.glucometer.service,
10
+ characteristicUuid: COFOE_GATT.glucometer.write,
11
+ frame
12
+ });
13
+ const report = (params, reading) => params.onResult({
14
+ caseType: CaseType.RESULT,
15
+ measurementTypeKey: MeasurementTypeKey.bloodGlucose,
16
+ ...reading
17
+ });
18
+ const KFB06 = {
19
+ handshake: 0x01,
20
+ getInfo: 0x03,
21
+ setTime: 0x10,
22
+ getData: 0x07,
23
+ ack: 0x40,
24
+ ok: 0x00,
25
+ info: 0x13,
26
+ header: 0x15,
27
+ record: 0x11
28
+ };
29
+
30
+ /** MedM re-sends get-data every second until the data header arrives. */
31
+ const GET_DATA_RETRY_MS = 1_000;
32
+
33
+ /**
34
+ * KF-B06, CGH200 and Novocont Comfort: handshake, device info, set the clock, then get-data
35
+ * until the data header (`15`) arrives, and acknowledge each `11` record with the sequence
36
+ * byte it carried. There is no end-of-data command; the meter closes the link.
37
+ */
38
+ export class CofoeKfb06Sequencer {
39
+ phase = "handshake";
40
+ sequence = 0;
41
+ constructor(params) {
42
+ this.params = params;
43
+ }
44
+ initialCommands = () => [this.send(KFB06.handshake)];
45
+ isHistoryTransfer = () => true;
46
+ isNormalDisconnect = () => this.phase === "records";
47
+ commandTimeoutMs = () => this.phase === "header" ? GET_DATA_RETRY_MS : undefined;
48
+ onCommandTimeout = () => this.phase === "header" ? {
49
+ commands: [this.send(KFB06.getData)]
50
+ } : {};
51
+
52
+ /** Keeps the get-data retry running across anything that is not the data header. */
53
+ commandProgress = frame => this.phase === "header" && unframe("kfb06", frame).command !== KFB06.header ? "partial" : "complete";
54
+ nextCommand = frame => {
55
+ const {
56
+ command: received,
57
+ sequence,
58
+ body
59
+ } = unframe("kfb06", frame);
60
+ if (this.phase === "handshake" && received === KFB06.ok) {
61
+ this.phase = "info";
62
+ return [this.send(KFB06.getInfo)];
63
+ }
64
+ if (this.phase === "info" && received === KFB06.info) {
65
+ this.phase = "time";
66
+ return [command(kfb06SetTime(this.sequence++, this.now()))];
67
+ }
68
+ if (this.phase === "time" && received === KFB06.ok) {
69
+ this.phase = "header";
70
+ return [this.send(KFB06.getData)];
71
+ }
72
+ if (this.phase === "header" && received === KFB06.header) {
73
+ this.phase = "records";
74
+ }
75
+ if ((this.phase === "header" || this.phase === "records") && received === KFB06.record) {
76
+ const reading = readKfb06Glucose(body);
77
+ if (reading) {
78
+ report(this.params, reading);
79
+ }
80
+ return [command(kfb06Frame(KFB06.ack, sequence))];
81
+ }
82
+ return undefined;
83
+ };
84
+ send = code => command(kfb06Frame(code, this.sequence++));
85
+ now = () => this.params.now?.() ?? new Date();
86
+ }
87
+ const CGH25 = {
88
+ live: 0x00,
89
+ timeRequest: 0x01,
90
+ record: 0x02,
91
+ count: 0x04,
92
+ ready: 0x06,
93
+ getRecord: 0x02,
94
+ getCount: 0x04
95
+ };
96
+
97
+ /**
98
+ * CGH25 and CGH30. The meter drives: it asks for the time (`01`), says it is ready (`06`), is
99
+ * asked for its record count, and the records are then pulled newest first, from index `count`
100
+ * down to 1. MedM can also wipe the meter's memory afterwards; that is never done here.
101
+ */
102
+ export class CofoeCgh25Sequencer {
103
+ remaining = 0;
104
+ finished = false;
105
+ constructor(params) {
106
+ this.params = params;
107
+ }
108
+ initialCommands = () => [];
109
+ isHistoryTransfer = () => true;
110
+ isNormalDisconnect = () => this.finished;
111
+ nextCommand = frame => {
112
+ const {
113
+ command: received,
114
+ body
115
+ } = unframe("cgh25", frame);
116
+ switch (received) {
117
+ case CGH25.timeRequest:
118
+ return [command(cgh25SetTime(this.now()))];
119
+ case CGH25.ready:
120
+ return [command(cgh25Frame(CGH25.getCount))];
121
+ case CGH25.count:
122
+ this.remaining = (body[0] ?? 0) << 8 | (body[1] ?? 0);
123
+ return this.requestNext();
124
+ case CGH25.live:
125
+ case CGH25.record:
126
+ {
127
+ const reading = readCgh25Glucose(body);
128
+ if (reading) {
129
+ report(this.params, reading);
130
+ }
131
+ return received === CGH25.record ? this.requestNext() : undefined;
132
+ }
133
+ default:
134
+ return undefined;
135
+ }
136
+ };
137
+ requestNext = () => {
138
+ const index = this.remaining;
139
+ if (index < 1) {
140
+ this.finished = true;
141
+ return undefined;
142
+ }
143
+ this.remaining = index - 1;
144
+ return [command(cgh25Frame(CGH25.getRecord, [index >> 8, index & 0xff, 0, 0, 0, 0, 0, 0, 0]))];
145
+ };
146
+ now = () => this.params.now?.() ?? new Date();
147
+ }
148
+ //# sourceMappingURL=cofoe-glucose.sequencer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MeasurementTypeKey","CaseType","cgh25Frame","cgh25SetTime","COFOE_GATT","kfb06Frame","kfb06SetTime","unframe","readCgh25Glucose","readKfb06Glucose","command","frame","serviceUuid","glucometer","service","characteristicUuid","write","report","params","reading","onResult","caseType","RESULT","measurementTypeKey","bloodGlucose","KFB06","handshake","getInfo","setTime","getData","ack","ok","info","header","record","GET_DATA_RETRY_MS","CofoeKfb06Sequencer","phase","sequence","constructor","initialCommands","send","isHistoryTransfer","isNormalDisconnect","commandTimeoutMs","undefined","onCommandTimeout","commands","commandProgress","nextCommand","received","body","now","code","Date","CGH25","live","timeRequest","count","ready","getRecord","getCount","CofoeCgh25Sequencer","remaining","finished","requestNext","index"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/cofoe/cofoe-glucose.sequencer.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ import { MeasurementTypeKey } from "@ovok/core";
4
+ import { CaseType } from "../../../types/case-type.js";
5
+ import { readThermometerText } from "./cofoe.records.js";
6
+
7
+ /** KF-HW-081A: one ASCII reading per notification, timed by the phone; the app never writes. */
8
+ class CofoeThermometerSequencer {
9
+ recorded = false;
10
+ constructor(params) {
11
+ this.params = params;
12
+ }
13
+ initialCommands = () => [];
14
+ isNormalDisconnect = () => this.recorded;
15
+ nextCommand = frame => {
16
+ const bodyTemp = readThermometerText(frame);
17
+ if (bodyTemp !== undefined) {
18
+ this.recorded = true;
19
+ this.params.onResult({
20
+ caseType: CaseType.RESULT,
21
+ measurementTypeKey: MeasurementTypeKey.temperature,
22
+ bodyTemp,
23
+ recordedAt: new Date()
24
+ });
25
+ }
26
+ return undefined;
27
+ };
28
+ }
29
+ export { CofoeThermometerSequencer };
30
+ //# sourceMappingURL=cofoe-thermometer.sequencer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MeasurementTypeKey","CaseType","readThermometerText","CofoeThermometerSequencer","recorded","constructor","params","initialCommands","isNormalDisconnect","nextCommand","frame","bodyTemp","undefined","onResult","caseType","RESULT","measurementTypeKey","temperature","recordedAt","Date"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/cofoe/cofoe-thermometer.sequencer.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,YAAY;AAE/C,SAASC,QAAQ,QAAQ,6BAA0B;AAInD,SAASC,mBAAmB,QAAQ,oBAAiB;;AAErD;AACA,MAAMC,yBAAyB,CAA6B;EAClDC,QAAQ,GAAG,KAAK;EAEjBC,WAAWA,CAAkBC,MAA+D,EAAE;IAAA,KAAjEA,MAA+D,GAA/DA,MAA+D;EAAG;EAE/FC,eAAe,GAAGA,CAAA,KAAgC,EAAE;EAEpDC,kBAAkB,GAAGA,CAAA,KAAe,IAAI,CAACJ,QAAQ;EAEjDK,WAAW,GAAIC,KAAwB,IAAgB;IAC5D,MAAMC,QAAQ,GAAGT,mBAAmB,CAACQ,KAAK,CAAC;IAE3C,IAAIC,QAAQ,KAAKC,SAAS,EAAE;MAC1B,IAAI,CAACR,QAAQ,GAAG,IAAI;MACpB,IAAI,CAACE,MAAM,CAACO,QAAQ,CAAC;QACnBC,QAAQ,EAAEb,QAAQ,CAACc,MAAM;QACzBC,kBAAkB,EAAEhB,kBAAkB,CAACiB,WAAW;QAClDN,QAAQ;QACRO,UAAU,EAAE,IAAIC,IAAI,CAAC;MACvB,CAAC,CAAC;IACJ;IAEA,OAAOP,SAAS;EAClB,CAAC;AACH;AAEA,SAAST,yBAAyB","ignoreList":[]}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ import { IntegratedDevices } from "../../../types/integrated-devices.js";
4
+ import { BTManagedDevice } from "../bt-managed-device.js";
5
+ import { CofoeBpSequencer } from "./cofoe-bp.sequencer.js";
6
+ import { CofoeCgh25Sequencer, CofoeKfb06Sequencer } from "./cofoe-glucose.sequencer.js";
7
+ import { CofoeThermometerSequencer } from "./cofoe-thermometer.sequencer.js";
8
+ import { COFOE_GATT, CofoeFrameReader } from "./cofoe.protocol.js";
9
+ const passThrough = {
10
+ caseValuePosition: [],
11
+ cases: []
12
+ };
13
+ const service = ({
14
+ service: uuid,
15
+ notify
16
+ }, optional = false) => ({
17
+ uuid,
18
+ optional,
19
+ monitorUuids: [{
20
+ uuid: notify,
21
+ parsingModel: passThrough
22
+ }]
23
+ });
24
+
25
+ /** The 0x18F0 generation is declared under both UUID layouts MedM's build could mean. */
26
+ const historyServices = [service(COFOE_GATT.history, true), service(COFOE_GATT.historyReversed, true)];
27
+ const SERVICES = {
28
+ [IntegratedDevices.COFOE_BPM]: [service(COFOE_GATT.bloodPressure)],
29
+ [IntegratedDevices.COFOE_BPM_HISTORY]: historyServices,
30
+ [IntegratedDevices.COFOE_GLUCOMETER]: [service(COFOE_GATT.glucometer)],
31
+ [IntegratedDevices.COFOE_GLUCOMETER_CGH25]: [service(COFOE_GATT.glucometer)],
32
+ [IntegratedDevices.COFOE_THERMOMETER]: historyServices
33
+ };
34
+ const FRAMING = {
35
+ [IntegratedDevices.COFOE_BPM]: "bloodPressure",
36
+ [IntegratedDevices.COFOE_BPM_HISTORY]: "bloodPressure",
37
+ [IntegratedDevices.COFOE_GLUCOMETER]: "kfb06",
38
+ [IntegratedDevices.COFOE_GLUCOMETER_CGH25]: "cgh25"
39
+ };
40
+
41
+ /** Cofoe KF-6x blood-pressure monitors, KF-B06 and CGH glucometers and the KF-HW-081A thermometer. */
42
+ class CofoeDeviceClass extends BTManagedDevice {
43
+ stuckDataTimeout = 90_000;
44
+ onStreamStart = undefined;
45
+ constructor(device, params) {
46
+ super(device, params);
47
+ this.mainServices = SERVICES[params.deviceName];
48
+ const framing = FRAMING[params.deviceName];
49
+ if (framing) {
50
+ this.frameReader = new CofoeFrameReader(framing);
51
+ }
52
+ const onResult = result => this.onResult?.(result);
53
+ this.createCommandSequencer = () => {
54
+ switch (params.deviceName) {
55
+ case IntegratedDevices.COFOE_GLUCOMETER:
56
+ return new CofoeKfb06Sequencer({
57
+ onResult
58
+ });
59
+ case IntegratedDevices.COFOE_GLUCOMETER_CGH25:
60
+ return new CofoeCgh25Sequencer({
61
+ onResult
62
+ });
63
+ case IntegratedDevices.COFOE_THERMOMETER:
64
+ return new CofoeThermometerSequencer({
65
+ onResult
66
+ });
67
+ default:
68
+ return new CofoeBpSequencer({
69
+ history: params.deviceName === IntegratedDevices.COFOE_BPM_HISTORY,
70
+ onResult
71
+ });
72
+ }
73
+ };
74
+ }
75
+
76
+ /** The thermometer has no frame reader: one notification is one message. */
77
+ validatePackage = () => true;
78
+ handleSuccessResult() {
79
+ return;
80
+ }
81
+ }
82
+ export { CofoeDeviceClass as CofoeDevice };
83
+ //# sourceMappingURL=cofoe.device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["IntegratedDevices","BTManagedDevice","CofoeBpSequencer","CofoeCgh25Sequencer","CofoeKfb06Sequencer","CofoeThermometerSequencer","COFOE_GATT","CofoeFrameReader","passThrough","caseValuePosition","cases","service","uuid","notify","optional","monitorUuids","parsingModel","historyServices","history","historyReversed","SERVICES","COFOE_BPM","bloodPressure","COFOE_BPM_HISTORY","COFOE_GLUCOMETER","glucometer","COFOE_GLUCOMETER_CGH25","COFOE_THERMOMETER","FRAMING","CofoeDeviceClass","stuckDataTimeout","onStreamStart","undefined","constructor","device","params","mainServices","deviceName","framing","frameReader","onResult","result","createCommandSequencer","validatePackage","handleSuccessResult","CofoeDevice"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/cofoe/cofoe.device.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+
3
+ /* eslint-disable import/group-exports */
4
+
5
+ import { FrameReadStatus } from "../../../types/frame-read-status.js";
6
+ import { calculateCrc8Maxim } from "../../../utils/calculate-crc-8-maxim.js";
7
+ import { hexToByte } from "../../../utils/hex-to-byte.js";
8
+
9
+ /**
10
+ * Cofoe blood-pressure monitors, glucometers and thermometer, from MedM Health Diary 3.12.11's
11
+ * `CCofoe_*` classes. Three binary framings and one ASCII one:
12
+ *
13
+ * - `FF FF len cmd payload ck` (blood pressure): `len` is the whole frame, `ck` makes the byte
14
+ * sum from `len` on zero.
15
+ * - `5A A5 cmd seq len payload crc` (KF-B06 glucometers): CRC-8/MAXIM over `cmd … payload`.
16
+ * - `$PCL A cmd len payload sum` (CGH25 glucometers): the 8-bit sum of everything after `$`.
17
+ * - `<me>o=VVVVx=T\r\n` (KF-HW-081A thermometer), one notification each.
18
+ *
19
+ * MedM does not check the KF-66EP+ checksum and only drops a KF-B06 frame whose CRC happens to
20
+ * be zero; every frame here is verified and dropped when it does not add up.
21
+ */
22
+ const sig16 = assigned => `0000${assigned}-0000-1000-8000-00805f9b34fb`;
23
+
24
+ /**
25
+ * MedM builds the KF-66EP+ and thermometer UUIDs with their words reversed, which reads as
26
+ * `fb349b5f-8000-0080-0010-0000XXXX0000`. Which of the two the hardware exposes is unknown, so
27
+ * both are declared, optional, and the one discovery finds is used.
28
+ */
29
+ const reversed = assigned => `fb349b5f-8000-0080-0010-0000${assigned.slice(2)}${assigned.slice(0, 2)}0000`;
30
+ const gatt = (service, notify, write, wrap) => ({
31
+ service: wrap(service),
32
+ notify: wrap(notify),
33
+ write: wrap(write)
34
+ });
35
+ export const COFOE_GATT = {
36
+ bloodPressure: gatt("f018", "f02a", "f12a", sig16),
37
+ history: gatt("18f0", "2af0", "2af1", sig16),
38
+ historyReversed: gatt("18f0", "2af0", "2af1", reversed),
39
+ glucometer: gatt("ae30", "ae02", "ae01", sig16)
40
+ };
41
+ const toHex = bytes => bytes.map(value => (value & 0xff).toString(16).padStart(2, "0"));
42
+ export const toBytes = frame => frame.map(byte => hexToByte(byte));
43
+ const sum = bytes => bytes.reduce((total, value) => total + value, 0) & 0xff;
44
+
45
+ /* ---------------------------------------------------------------- framing */
46
+
47
+ /** `FF FF len cmd payload ck`. */
48
+ export const bpFrame = (command, payload = []) => {
49
+ const covered = [payload.length + 5, command, ...payload];
50
+ return toHex([0xff, 0xff, ...covered, -sum(covered) & 0xff]);
51
+ };
52
+
53
+ /** `5A A5 cmd seq len payload crc`. */
54
+ export const kfb06Frame = (command, sequence, payload = []) => {
55
+ const covered = toHex([command, sequence, payload.length, ...payload]);
56
+ return [...toHex([0x5a, 0xa5]), ...covered, ...toHex([calculateCrc8Maxim(covered, covered.length)])];
57
+ };
58
+ const PCL = [0x24, 0x50, 0x43, 0x4c];
59
+
60
+ /** `$PCL A cmd len payload sum`. */
61
+ export const cgh25Frame = (command, payload = []) => {
62
+ const bytes = [...PCL, 0x41, command, payload.length, ...payload];
63
+ return toHex([...bytes, sum(bytes.slice(1))]);
64
+ };
65
+ const FRAMINGS = {
66
+ bloodPressure: {
67
+ magic: [0xff, 0xff],
68
+ header: 4,
69
+ length: frame => frame[2] ?? 0,
70
+ valid: frame => frame.length >= 5 && sum(frame.slice(2)) === 0
71
+ },
72
+ kfb06: {
73
+ magic: [0x5a, 0xa5],
74
+ header: 5,
75
+ length: frame => (frame[4] ?? 0) + 6,
76
+ valid: frame => calculateCrc8Maxim(toHex(frame.slice(2, -1)), frame.length - 3) === frame[frame.length - 1]
77
+ },
78
+ cgh25: {
79
+ magic: PCL,
80
+ header: 7,
81
+ length: frame => (frame[6] ?? 0) + 8,
82
+ valid: frame => sum(frame.slice(1, -1)) === frame[frame.length - 1]
83
+ }
84
+ };
85
+ /** Isolates verified frames of one framing whatever the notification boundaries. */
86
+ export class CofoeFrameReader {
87
+ constructor(framing) {
88
+ this.framing = FRAMINGS[framing];
89
+ }
90
+ readFrame(buffer) {
91
+ const {
92
+ magic,
93
+ header,
94
+ length,
95
+ valid
96
+ } = this.framing;
97
+ const values = toBytes(buffer);
98
+ const start = values.findIndex((_, index) => magic.every((byte, offset) => index + offset >= values.length || values[index + offset] === byte));
99
+ if (start === -1) {
100
+ return {
101
+ status: FrameReadStatus.INCOMPLETE,
102
+ consumedBytes: values.length
103
+ };
104
+ }
105
+ if (start + header > values.length) {
106
+ return {
107
+ status: FrameReadStatus.INCOMPLETE,
108
+ consumedBytes: start
109
+ };
110
+ }
111
+ const total = length(values.slice(start));
112
+ if (total < header + 1) {
113
+ return {
114
+ status: FrameReadStatus.CORRUPT,
115
+ consumedBytes: start + 1
116
+ };
117
+ }
118
+ if (start + total > values.length) {
119
+ return {
120
+ status: FrameReadStatus.INCOMPLETE,
121
+ consumedBytes: start
122
+ };
123
+ }
124
+ if (!valid(values.slice(start, start + total))) {
125
+ return {
126
+ status: FrameReadStatus.CORRUPT,
127
+ consumedBytes: start + 1
128
+ };
129
+ }
130
+ return {
131
+ status: FrameReadStatus.COMPLETE,
132
+ consumedBytes: start + total,
133
+ frame: buffer.slice(start, start + total)
134
+ };
135
+ }
136
+ }
137
+
138
+ /** The command and body of a verified frame. */
139
+ export const unframe = (framing, frame) => {
140
+ const bytes = toBytes(frame);
141
+ if (framing === "kfb06") {
142
+ return {
143
+ command: (bytes[2] ?? 0) & 0x3f,
144
+ sequence: bytes[3] ?? 0,
145
+ body: bytes.slice(5, -1)
146
+ };
147
+ }
148
+ const at = framing === "bloodPressure" ? 3 : 5;
149
+ return {
150
+ command: bytes[at] ?? 0,
151
+ sequence: 0,
152
+ body: bytes.slice(FRAMINGS[framing].header, -1)
153
+ };
154
+ };
155
+
156
+ /* ------------------------------------------------------------------ time */
157
+
158
+ const toBcd = value => Math.floor(value / 10) % 10 << 4 | value % 10;
159
+ const clock = now => [now.getFullYear() - 2000, now.getMonth() + 1, now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds()];
160
+
161
+ /** `Cofoe_BPM` set-time, `08`: binary `YY MM DD hh mm ss`. */
162
+ export const bpSetTime = now => bpFrame(0x08, clock(now));
163
+
164
+ /** `Cofoe_KF66EP` set-time, `08`: BCD `YY MM DD hh mm ss`. */
165
+ export const historySetTime = now => bpFrame(0x08, clock(now).map(toBcd));
166
+
167
+ /** KF-B06 set-time, `10`: binary `YY MM DD hh mm ss`. */
168
+ export const kfb06SetTime = (sequence, now) => kfb06Frame(0x10, sequence, clock(now));
169
+
170
+ /** CGH25 set-time, `01`: `00 00 YY MM DD hh mm 00 00`. */
171
+ export const cgh25SetTime = now => cgh25Frame(0x01, [0, 0, ...clock(now).slice(0, 5), 0, 0]);
172
+ export const BP_ACK = bpFrame(0x05);
173
+ //# sourceMappingURL=cofoe.protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FrameReadStatus","calculateCrc8Maxim","hexToByte","sig16","assigned","reversed","slice","gatt","service","notify","write","wrap","COFOE_GATT","bloodPressure","history","historyReversed","glucometer","toHex","bytes","map","value","toString","padStart","toBytes","frame","byte","sum","reduce","total","bpFrame","command","payload","covered","length","kfb06Frame","sequence","PCL","cgh25Frame","FRAMINGS","magic","header","valid","kfb06","cgh25","CofoeFrameReader","constructor","framing","readFrame","buffer","values","start","findIndex","_","index","every","offset","status","INCOMPLETE","consumedBytes","CORRUPT","COMPLETE","unframe","body","at","toBcd","Math","floor","clock","now","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","bpSetTime","historySetTime","kfb06SetTime","cgh25SetTime","BP_ACK"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/cofoe/cofoe.protocol.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ /* eslint-disable import/group-exports */
4
+
5
+ import { toBytes } from "./cofoe.protocol.js";
6
+
7
+ /**
8
+ * Cofoe record decoders. Times are local wall-clock with no zone; a field out of range drops
9
+ * the record rather than letting `Date` roll it into a plausible wrong time.
10
+ */
11
+ const fromBcd = value => value >> 4 > 9 || (value & 0x0f) > 9 ? undefined : (value >> 4) * 10 + (value & 0x0f);
12
+
13
+ /** `[year - 2000, month, day, hour, minute, second]` as phone-local time, or undefined if any field is out of range. */
14
+ const localTime = fields => {
15
+ if (fields.some(field => field === undefined)) {
16
+ return undefined;
17
+ }
18
+ const [year, month, day, hour, minute, second] = fields.map((field, index) => index === 0 ? field + 2000 : field);
19
+ const time = new Date(year, month - 1, day, hour, minute, second);
20
+ return time.getMonth() === month - 1 && time.getDate() === day && time.getHours() === hour && time.getMinutes() === minute && time.getSeconds() === second ? time : undefined;
21
+ };
22
+ /** Pulse, systolic - 20, diastolic - 20 (mmHg), irregular-pulse flag. */
23
+ const readPressures = bytes => {
24
+ if (bytes.length < 4) {
25
+ return undefined;
26
+ }
27
+ const [heartRate, systolic, diastolic, flag] = bytes;
28
+ return systolic > diastolic && heartRate > 0 ? {
29
+ systolic: systolic + 20,
30
+ diastolic: diastolic + 20,
31
+ heartRate,
32
+ irregularHeartbeat: flag !== 0
33
+ } : undefined;
34
+ };
35
+
36
+ /** `Cofoe_BPM` result, `03`: four bytes, timed by the phone. */
37
+ export const readBpResult = body => body.length === 4 ? readPressures(body) : undefined;
38
+
39
+ /** `Cofoe_KF66EP` record, `02`/`03`: BCD `YY MM DD hh mm ss`, then the four result bytes. */
40
+ export const readBpRecord = body => {
41
+ const recordedAt = body.length === 10 ? localTime(body.slice(0, 6).map(fromBcd)) : undefined;
42
+ const pressures = readPressures(body.slice(6));
43
+ return recordedAt && pressures && {
44
+ ...pressures,
45
+ recordedAt
46
+ };
47
+ };
48
+
49
+ /** One mmol/L of glucose (180.16 g/mol) is 18.016 mg/dL, as in the SIG glucose profile. */
50
+ const MG_PER_DL_PER_MMOL_PER_L = 18.016;
51
+
52
+ /** Tenths of a mmol/L, rounded to whole mg/dL. */
53
+ const mgPerDl = tenthsMmol => Math.round(tenthsMmol / 10 * MG_PER_DL_PER_MMOL_PER_L);
54
+ const glucose = (tenthsMmol, recordedAt) => recordedAt && tenthsMmol > 0 && tenthsMmol < 0xffff ? {
55
+ bloodGlucose: mgPerDl(tenthsMmol),
56
+ recordedAt
57
+ } : undefined;
58
+ const KFB06_GLUCOSE_TYPE = 9;
59
+
60
+ /** KF-B06 record, `11`: binary `YY MM DD hh mm ss`, type (`9` = glucose), u16 LE tenths of mmol/L. */
61
+ export const readKfb06Glucose = body => body.length === 9 && body[6] === KFB06_GLUCOSE_TYPE ? glucose((body[8] ?? 0) << 8 | (body[7] ?? 0), localTime(body.slice(0, 6))) : undefined;
62
+
63
+ /** CGH25 record, `00`/`02`: index (u16 BE), `YY MM DD hh mm`, u16 BE tenths of mmol/L. */
64
+ export const readCgh25Glucose = body => body.length === 9 ? glucose((body[7] ?? 0) << 8 | (body[8] ?? 0), localTime([...body.slice(2, 7), 0])) : undefined;
65
+
66
+ /** `<me>…o=VVVV…x=T…\r\n`: hundredths of a degree Celsius; type `3` is dropped, as MedM does. */
67
+ const THERMOMETER_TEXT = /^<me>(.*)\r\n$/s;
68
+ export const readThermometerText = frame => {
69
+ const text = THERMOMETER_TEXT.exec(String.fromCharCode(...toBytes(frame)))?.[1];
70
+ const type = text && /x=([0-9-])/.exec(text)?.[1];
71
+ const value = text && /o=([0-9-]{1,4})/.exec(text)?.[1];
72
+ if (!type || !value || type === "3" || !/^-?\d+$/.test(value)) {
73
+ return undefined;
74
+ }
75
+ const hundredths = Number.parseInt(value, 10);
76
+ return hundredths > 0 ? hundredths / 100 : undefined;
77
+ };
78
+ //# sourceMappingURL=cofoe.records.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["toBytes","fromBcd","value","undefined","localTime","fields","some","field","year","month","day","hour","minute","second","map","index","time","Date","getMonth","getDate","getHours","getMinutes","getSeconds","readPressures","bytes","length","heartRate","systolic","diastolic","flag","irregularHeartbeat","readBpResult","body","readBpRecord","recordedAt","slice","pressures","MG_PER_DL_PER_MMOL_PER_L","mgPerDl","tenthsMmol","Math","round","glucose","bloodGlucose","KFB06_GLUCOSE_TYPE","readKfb06Glucose","readCgh25Glucose","THERMOMETER_TEXT","readThermometerText","frame","text","exec","String","fromCharCode","type","test","hundredths","Number","parseInt"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/cofoe/cofoe.records.ts"],"mappings":"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","ignoreList":[]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { IntegratedDevices } from "../../../types/integrated-devices.js";
4
4
  import { BTManagedDevice } from "../bt-managed-device.js";
5
- import { JUMPER_VALUES, LiveOximeterSequencer } from "../live-oximeter.sequencer.js";
5
+ import { JUMPER_VALUES, LiveOximeterSequencer, readOximeterData } from "../live-oximeter.sequencer.js";
6
6
  import { JUMPER_GATT, JUMPER_NOTIFY, JUMPER_SERVICE } from "./jumper.protocol.js";
7
7
  import { JumperSequencer } from "./jumper.sequencer.js";
8
8
  const passThrough = {
@@ -34,7 +34,7 @@ class JumperDeviceClass extends BTManagedDevice {
34
34
  this.mainServices = SERVICES[params.deviceName];
35
35
  const onResult = result => this.onResult?.(result);
36
36
  this.createCommandSequencer = () => params.deviceName === IntegratedDevices.JUMPER_OXIMETER ? new LiveOximeterSequencer({
37
- isValuesFrame: JUMPER_VALUES,
37
+ readValues: frame => readOximeterData(frame, JUMPER_VALUES),
38
38
  onResult
39
39
  }) : new JumperSequencer({
40
40
  kind: params.deviceName === IntegratedDevices.JUMPER_BPM ? "blood-pressure" : "thermometer",
@@ -1 +1 @@
1
- {"version":3,"names":["IntegratedDevices","BTManagedDevice","JUMPER_VALUES","LiveOximeterSequencer","JUMPER_GATT","JUMPER_NOTIFY","JUMPER_SERVICE","JumperSequencer","passThrough","caseValuePosition","cases","service","uuid","notify","optional","monitorUuids","parsingModel","SERVICES","JUMPER_OXIMETER","oximeterAlternate","JUMPER_THERMOMETER","thermometerAlternate","JUMPER_BPM","bloodPressure","JumperDeviceClass","stuckDataTimeout","onStreamStart","undefined","constructor","device","params","mainServices","deviceName","onResult","result","createCommandSequencer","isValuesFrame","kind","validatePackage","handleSuccessResult","JumperDevice"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/jumper/jumper.device.ts"],"mappings":";;AAIA,SAASA,iBAAiB,QAAQ,sCAAmC;AAGrE,SAASC,eAAe,QAAQ,yBAAsB;AACtD,SAASC,aAAa,EAAEC,qBAAqB,QAAQ,+BAA4B;AAEjF,SAASC,WAAW,EAAEC,aAAa,EAAEC,cAAc,QAAQ,sBAAmB;AAC9E,SAASC,eAAe,QAAQ,uBAAoB;AAOpD,MAAMC,WAAW,GAAG;EAAEC,iBAAiB,EAAE,EAAE;EAAEC,KAAK,EAAE;AAAG,CAAC;AAExD,MAAMC,OAAO,GAAGA,CAACC,IAAY,EAAEC,MAAc,EAAEC,QAAiB,MAAgB;EAC9EF,IAAI;EACJE,QAAQ;EACRC,YAAY,EAAE,CAAC;IAAEH,IAAI,EAAEC,MAAM;IAAEG,YAAY,EAAER;EAAY,CAAC;AAC5D,CAAC,CAAC;;AAEF;AACA,MAAMS,QAA0C,GAAG;EACjD,CAACjB,iBAAiB,CAACkB,eAAe,GAAG,CACnCP,OAAO,CAACL,cAAc,EAAED,aAAa,EAAE,IAAI,CAAC,EAC5CM,OAAO,CAACP,WAAW,CAACe,iBAAiB,CAACR,OAAO,EAAEP,WAAW,CAACe,iBAAiB,CAACN,MAAM,EAAE,IAAI,CAAC,CAC3F;EACD,CAACb,iBAAiB,CAACoB,kBAAkB,GAAG,CACtCT,OAAO,CAACL,cAAc,EAAED,aAAa,EAAE,IAAI,CAAC,EAC5CM,OAAO,CAACP,WAAW,CAACiB,oBAAoB,CAACV,OAAO,EAAEP,WAAW,CAACiB,oBAAoB,CAACR,MAAM,EAAE,IAAI,CAAC,CACjG;EACD,CAACb,iBAAiB,CAACsB,UAAU,GAAG,CAC9BX,OAAO,CAACP,WAAW,CAACmB,aAAa,CAACZ,OAAO,EAAEP,WAAW,CAACmB,aAAa,CAACV,MAAM,EAAE,KAAK,CAAC;AAEvF,CAAC;;AAED;AACA,MAAMW,iBAAiB,SAASvB,eAAe,CAAe;EAElDwB,gBAAgB,GAAG,OAAO;EAC1BC,aAAa,GAAGC,SAAS;EAE5BC,WAAWA,CAACC,MAAc,EAAEC,MAAwC,EAAE;IAC3E,KAAK,CAACD,MAAM,EAAEC,MAAM,CAAC;IACrB,IAAI,CAACC,YAAY,GAAGd,QAAQ,CAACa,MAAM,CAACE,UAAU,CAAC;IAE/C,MAAMC,QAAQ,GAAIC,MAA+B,IAC/C,IAAI,CAACD,QAAQ,GACXC,MACF,CAAC;IAEH,IAAI,CAACC,sBAAsB,GAAG,MAC5BL,MAAM,CAACE,UAAU,KAAKhC,iBAAiB,CAACkB,eAAe,GACnD,IAAIf,qBAAqB,CAAC;MAAEiC,aAAa,EAAElC,aAAa;MAAE+B;IAAS,CAAC,CAAC,GACrE,IAAI1B,eAAe,CAAC;MAClB8B,IAAI,EACFP,MAAM,CAACE,UAAU,KAAKhC,iBAAiB,CAACsB,UAAU,GAAG,gBAAgB,GAAG,aAAa;MACvFW;IACF,CAAC,CAAC;EACV;;EAEA;EACUK,eAAe,GAAGA,CAAA,KAAe,IAAI;EAErCC,mBAAmBA,CAAA,EAAS;IACpC;EACF;AACF;AAEA,SAASf,iBAAiB,IAAIgB,YAAY","ignoreList":[]}
1
+ {"version":3,"names":["IntegratedDevices","BTManagedDevice","JUMPER_VALUES","LiveOximeterSequencer","readOximeterData","JUMPER_GATT","JUMPER_NOTIFY","JUMPER_SERVICE","JumperSequencer","passThrough","caseValuePosition","cases","service","uuid","notify","optional","monitorUuids","parsingModel","SERVICES","JUMPER_OXIMETER","oximeterAlternate","JUMPER_THERMOMETER","thermometerAlternate","JUMPER_BPM","bloodPressure","JumperDeviceClass","stuckDataTimeout","onStreamStart","undefined","constructor","device","params","mainServices","deviceName","onResult","result","createCommandSequencer","readValues","frame","kind","validatePackage","handleSuccessResult","JumperDevice"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/jumper/jumper.device.ts"],"mappings":";;AAIA,SAASA,iBAAiB,QAAQ,sCAAmC;AAGrE,SAASC,eAAe,QAAQ,yBAAsB;AACtD,SAASC,aAAa,EAAEC,qBAAqB,EAAEC,gBAAgB,QAAQ,+BAA4B;AAEnG,SAASC,WAAW,EAAEC,aAAa,EAAEC,cAAc,QAAQ,sBAAmB;AAC9E,SAASC,eAAe,QAAQ,uBAAoB;AAOpD,MAAMC,WAAW,GAAG;EAAEC,iBAAiB,EAAE,EAAE;EAAEC,KAAK,EAAE;AAAG,CAAC;AAExD,MAAMC,OAAO,GAAGA,CAACC,IAAY,EAAEC,MAAc,EAAEC,QAAiB,MAAgB;EAC9EF,IAAI;EACJE,QAAQ;EACRC,YAAY,EAAE,CAAC;IAAEH,IAAI,EAAEC,MAAM;IAAEG,YAAY,EAAER;EAAY,CAAC;AAC5D,CAAC,CAAC;;AAEF;AACA,MAAMS,QAA0C,GAAG;EACjD,CAAClB,iBAAiB,CAACmB,eAAe,GAAG,CACnCP,OAAO,CAACL,cAAc,EAAED,aAAa,EAAE,IAAI,CAAC,EAC5CM,OAAO,CAACP,WAAW,CAACe,iBAAiB,CAACR,OAAO,EAAEP,WAAW,CAACe,iBAAiB,CAACN,MAAM,EAAE,IAAI,CAAC,CAC3F;EACD,CAACd,iBAAiB,CAACqB,kBAAkB,GAAG,CACtCT,OAAO,CAACL,cAAc,EAAED,aAAa,EAAE,IAAI,CAAC,EAC5CM,OAAO,CAACP,WAAW,CAACiB,oBAAoB,CAACV,OAAO,EAAEP,WAAW,CAACiB,oBAAoB,CAACR,MAAM,EAAE,IAAI,CAAC,CACjG;EACD,CAACd,iBAAiB,CAACuB,UAAU,GAAG,CAC9BX,OAAO,CAACP,WAAW,CAACmB,aAAa,CAACZ,OAAO,EAAEP,WAAW,CAACmB,aAAa,CAACV,MAAM,EAAE,KAAK,CAAC;AAEvF,CAAC;;AAED;AACA,MAAMW,iBAAiB,SAASxB,eAAe,CAAe;EAElDyB,gBAAgB,GAAG,OAAO;EAC1BC,aAAa,GAAGC,SAAS;EAE5BC,WAAWA,CAACC,MAAc,EAAEC,MAAwC,EAAE;IAC3E,KAAK,CAACD,MAAM,EAAEC,MAAM,CAAC;IACrB,IAAI,CAACC,YAAY,GAAGd,QAAQ,CAACa,MAAM,CAACE,UAAU,CAAC;IAE/C,MAAMC,QAAQ,GAAIC,MAA+B,IAC/C,IAAI,CAACD,QAAQ,GACXC,MACF,CAAC;IAEH,IAAI,CAACC,sBAAsB,GAAG,MAC5BL,MAAM,CAACE,UAAU,KAAKjC,iBAAiB,CAACmB,eAAe,GACnD,IAAIhB,qBAAqB,CAAC;MACxBkC,UAAU,EAAGC,KAAK,IAAKlC,gBAAgB,CAACkC,KAAK,EAAEpC,aAAa,CAAC;MAC7DgC;IACF,CAAC,CAAC,GACF,IAAI1B,eAAe,CAAC;MAClB+B,IAAI,EACFR,MAAM,CAACE,UAAU,KAAKjC,iBAAiB,CAACuB,UAAU,GAAG,gBAAgB,GAAG,aAAa;MACvFW;IACF,CAAC,CAAC;EACV;;EAEA;EACUM,eAAe,GAAGA,CAAA,KAAe,IAAI;EAErCC,mBAAmBA,CAAA,EAAS;IACpC;EACF;AACF;AAEA,SAAShB,iBAAiB,IAAIiB,YAAY","ignoreList":[]}
@@ -5,8 +5,9 @@ import { CaseType } from "../../types/case-type.js";
5
5
  import { hexToByte } from "../../utils/hex-to-byte.js";
6
6
 
7
7
  /**
8
- * Pulse oximeters that only notify live values - `PR SpO2 PI×10` after a header byte - with no
9
- * stored records and no clock: the AOJ-70A/70B and Jumper JPD-500D families.
8
+ * Pulse oximeters that only notify live values - `PR SpO2 PI×10` after a header byte (Yonker YK-81C:
9
+ * `SpO2 PR PI×10`, the AOJ header) - with no stored records and no clock: the AOJ-70A/70B, Jumper JPD-500D and
10
+ * Yonker YK-81C/YK-80B families.
10
11
  *
11
12
  * A spot reading is the last valid saturation and pulse once valid values stop for a few
12
13
  * seconds - the finger came out or the device went to sleep - which is also how MedM forms one.
@@ -16,6 +17,8 @@ const SETTLE_MS = 3_000;
16
17
 
17
18
  /** Picks the values frame out of whatever else the device sends (waveform, status). */
18
19
 
20
+ /** Which of pulse and SpO2 comes first after the header byte. */
21
+
19
22
  /** AOJ-70: header exactly `81`, extra bytes ignored. */
20
23
  const AOJ_VALUES = (header, length) => header === 0x81 && length >= 4;
21
24
 
@@ -23,12 +26,13 @@ const AOJ_VALUES = (header, length) => header === 0x81 && length >= 4;
23
26
  const JUMPER_VALUES = (header, length) => (header & 0x0f) === 1 && length === 4;
24
27
 
25
28
  /** Pulse rate counts at 1-254 bpm, SpO2 is invalid at 0 or 0x7F, PI 0 means none. */
26
- const readOximeterData = (frame, isValuesFrame = AOJ_VALUES) => {
29
+ const readOximeterData = (frame, isValuesFrame = AOJ_VALUES, fieldOrder = "pulse-spo2") => {
27
30
  if (!isValuesFrame(hexToByte(frame[0] ?? "00"), frame.length)) {
28
31
  return undefined;
29
32
  }
30
- const pulseRate = hexToByte(frame[1] ?? "00");
31
- const bloodOxygen = hexToByte(frame[2] ?? "00");
33
+ const first = hexToByte(frame[1] ?? "00");
34
+ const second = hexToByte(frame[2] ?? "00");
35
+ const [pulseRate, bloodOxygen] = fieldOrder === "pulse-spo2" ? [first, second] : [second, first];
32
36
  const perfusionIndex = hexToByte(frame[3] ?? "00");
33
37
  if (pulseRate < 1 || pulseRate > 254 || bloodOxygen === 0 || bloodOxygen === 0x7f) {
34
38
  return undefined;
@@ -63,7 +67,7 @@ class LiveOximeterSequencer {
63
67
 
64
68
  /** A valid value restarts the settle time; anything else leaves it running. */
65
69
  commandProgress = frame => {
66
- const values = readOximeterData(frame, this.params.isValuesFrame);
70
+ const values = this.params.readValues(frame);
67
71
  if (!values) {
68
72
  return "ignored";
69
73
  }