@ovok/native 0.4.0 → 0.4.1

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 (29) hide show
  1. package/lib/commonjs/modules/bt-management/services/device-creator.js +3 -1
  2. package/lib/commonjs/modules/bt-management/services/device-creator.js.map +1 -1
  3. package/lib/commonjs/modules/bt-management/services/devices/bc01/bc01.device.js +87 -0
  4. package/lib/commonjs/modules/bt-management/services/devices/bc01/bc01.device.js.map +1 -0
  5. package/lib/commonjs/modules/bt-management/services/devices/bc01/bc01.main-services.js +103 -0
  6. package/lib/commonjs/modules/bt-management/services/devices/bc01/bc01.main-services.js.map +1 -0
  7. package/lib/commonjs/modules/bt-management/types/device-measurement-map.js.map +1 -1
  8. package/lib/module/modules/bt-management/services/device-creator.js +3 -1
  9. package/lib/module/modules/bt-management/services/device-creator.js.map +1 -1
  10. package/lib/module/modules/bt-management/services/devices/bc01/bc01.device.js +83 -0
  11. package/lib/module/modules/bt-management/services/devices/bc01/bc01.device.js.map +1 -0
  12. package/lib/module/modules/bt-management/services/devices/bc01/bc01.main-services.js +99 -0
  13. package/lib/module/modules/bt-management/services/devices/bc01/bc01.main-services.js.map +1 -0
  14. package/lib/module/modules/bt-management/types/device-measurement-map.js.map +1 -1
  15. package/lib/typescript/commonjs/src/modules/bt-management/services/device-creator.d.ts.map +1 -1
  16. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bc01/bc01.device.d.ts +33 -0
  17. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bc01/bc01.device.d.ts.map +1 -0
  18. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bc01/bc01.main-services.d.ts +27 -0
  19. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bc01/bc01.main-services.d.ts.map +1 -0
  20. package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts +2 -2
  21. package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
  22. package/lib/typescript/module/src/modules/bt-management/services/device-creator.d.ts.map +1 -1
  23. package/lib/typescript/module/src/modules/bt-management/services/devices/bc01/bc01.device.d.ts +33 -0
  24. package/lib/typescript/module/src/modules/bt-management/services/devices/bc01/bc01.device.d.ts.map +1 -0
  25. package/lib/typescript/module/src/modules/bt-management/services/devices/bc01/bc01.main-services.d.ts +27 -0
  26. package/lib/typescript/module/src/modules/bt-management/services/devices/bc01/bc01.main-services.d.ts.map +1 -0
  27. package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts +2 -2
  28. package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
  29. package/package.json +4 -1
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.DeviceCreator = void 0;
7
7
  var _integratedDevicesMap = require("../constants/integrated-devices-map.js");
8
8
  var _integratedDevices = require("../types/integrated-devices.js");
9
+ var _bc01Device = require("./devices/bc01/bc01.device.js");
9
10
  var _bp2Device = require("./devices/bp2/bp2.device.js");
10
11
  var _f4Device = require("./devices/f4/f4.device.js");
11
12
  var _spo2Device = require("./devices/spo/spo2.device.js");
@@ -41,7 +42,8 @@ class DeviceCreator {
41
42
  const deviceMap = {
42
43
  [_integratedDevices.IntegratedDevices.BP2]: _bp2Device.BP2Device,
43
44
  [_integratedDevices.IntegratedDevices.F4]: _f4Device.F4Device,
44
- [_integratedDevices.IntegratedDevices.PC60WF]: _spo2Device.SPO2Device
45
+ [_integratedDevices.IntegratedDevices.PC60WF]: _spo2Device.SPO2Device,
46
+ [_integratedDevices.IntegratedDevices.BC01]: _bc01Device.BC01Device
45
47
  };
46
48
  const deviceClass = deviceMap[params.deviceName];
47
49
  if (!deviceClass) {
@@ -1 +1 @@
1
- {"version":3,"names":["_integratedDevicesMap","require","_integratedDevices","_bp2Device","_f4Device","_spo2Device","DeviceCreator","deviceNameCache","Map","CACHE_MAX_SIZE","constructor","acceptedDeviceNames","getDeviceName","foundName","deviceName","getIntegratedDeviceName","some","name","createDevice","params","trim","Error","device","id","deviceMap","IntegratedDevices","BP2","BP2Device","F4","F4Device","PC60WF","SPO2Device","deviceClass","destroy","clear","undefined","has","cached","get","matchedDevice","regex","deviceType","integratedDevicesMap","test","cacheDeviceName","size","firstKey","keys","next","value","delete","set","exports"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/services/device-creator.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_integratedDevicesMap","require","_integratedDevices","_bc01Device","_bp2Device","_f4Device","_spo2Device","DeviceCreator","deviceNameCache","Map","CACHE_MAX_SIZE","constructor","acceptedDeviceNames","getDeviceName","foundName","deviceName","getIntegratedDeviceName","some","name","createDevice","params","trim","Error","device","id","deviceMap","IntegratedDevices","BP2","BP2Device","F4","F4Device","PC60WF","SPO2Device","BC01","BC01Device","deviceClass","destroy","clear","undefined","has","cached","get","matchedDevice","regex","deviceType","integratedDevicesMap","test","cacheDeviceName","size","firstKey","keys","next","value","delete","set","exports"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/services/device-creator.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BC01Device = void 0;
7
+ var _caseType = require("../../../types/case-type.js");
8
+ var _btManagedDevice = require("../bt-managed-device.js");
9
+ var _bc01MainServices = require("./bc01.main-services.js");
10
+ /**
11
+ * Contec BC401 (BC01) urine analyzer driver.
12
+ *
13
+ * The BC401 is a single-shot device: the patient dips a URS-7 strip, presses
14
+ * the button, and the device pushes exactly one result frame on 0xFF01. There
15
+ * is no streaming state, no per-tick updates, and no measurement session to
16
+ * open — the device auto-starts on button press.
17
+ */
18
+ class BC01Device extends _btManagedDevice.BTManagedDevice {
19
+ onStreamStart = () => {};
20
+ mainServices = _bc01MainServices.bc01MainServices;
21
+
22
+ /**
23
+ * 90 s covers the maximum firmware-side reagent-pad settle time on a URS-7
24
+ * strip. If the device does not push a result frame within that window the
25
+ * data-processor times out and the driver surfaces "device unreachable".
26
+ */
27
+ stuckDataTimeout = 90_000;
28
+ validatePackage = pkg => {
29
+ pkg = pkg.map(b => b.toLowerCase());
30
+ let headIndex = -1;
31
+ for (let i = 0; i < pkg.length - 1; i++) {
32
+ if (pkg[i] === "aa" && pkg[i + 1] === "55") {
33
+ headIndex = i;
34
+ break;
35
+ }
36
+ }
37
+ if (headIndex === -1) {
38
+ return false;
39
+ }
40
+ if (headIndex > 0) {
41
+ pkg = pkg.slice(headIndex);
42
+ }
43
+ if (pkg.length < 5) {
44
+ return false;
45
+ }
46
+ const lengthByte = parseInt(pkg[2] ?? "0", 16) || 0;
47
+ const totalLen = 3 + lengthByte;
48
+ if (pkg.length < totalLen) {
49
+ return false;
50
+ }
51
+ return true;
52
+ };
53
+ handleSuccessResult(successResult) {
54
+ if (successResult.caseType !== _caseType.CaseType.RESULT) {
55
+ return;
56
+ }
57
+ if (!successResult.measurementTypeKey) {
58
+ this.onError?.(new Error(`Measurement type is undefined for case ${successResult.caseType}`));
59
+ return;
60
+ }
61
+ this.handleUrinalysisResult(successResult);
62
+ }
63
+ handleUrinalysisResult(successResult) {
64
+ const error = this.checkIfHasError(successResult);
65
+ if (error) {
66
+ this.onError?.(error);
67
+ return;
68
+ }
69
+ this.onResult?.(successResult);
70
+ }
71
+
72
+ /**
73
+ * A well-formed frame with all analyte fields still undefined means the
74
+ * device produced an empty read — typically a strip inserted upside down or
75
+ * removed before the reagent-pad timer completed.
76
+ */
77
+ checkIfHasError(successResult) {
78
+ const analytes = ["uro", "bld", "bil", "ket", "glu", "pro", "ph", "nit", "leu", "sg", "vc"];
79
+ const hasAnyReading = analytes.some(key => successResult[key] !== undefined);
80
+ if (!hasAnyReading) {
81
+ return "feedback-messages.measurement.disturb-detected-error";
82
+ }
83
+ return undefined;
84
+ }
85
+ }
86
+ exports.BC01Device = BC01Device;
87
+ //# sourceMappingURL=bc01.device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_caseType","require","_btManagedDevice","_bc01MainServices","BC01Device","BTManagedDevice","onStreamStart","mainServices","bc01MainServices","stuckDataTimeout","validatePackage","pkg","map","b","toLowerCase","headIndex","i","length","slice","lengthByte","parseInt","totalLen","handleSuccessResult","successResult","caseType","CaseType","RESULT","measurementTypeKey","onError","Error","handleUrinalysisResult","error","checkIfHasError","onResult","analytes","hasAnyReading","some","key","undefined","exports"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bc01/bc01.device.ts"],"mappings":";;;;;;AAEA,IAAAA,SAAA,GAAAC,OAAA;AAKA,IAAAC,gBAAA,GAAAD,OAAA;AAEA,IAAAE,iBAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,UAAU,SAASC,gCAAe,CAAyB;EAC5DC,aAAa,GAAeA,CAAA,KAAM,CAAC,CAAC;EAEpCC,YAAY,GAAeC,kCAAgB;;EAErD;AACF;AACA;AACA;AACA;EACYC,gBAAgB,GAAG,MAAM;EAEzBC,eAAe,GAAgCC,GAAG,IAAK;IAC/DA,GAAG,GAAGA,GAAG,CAACC,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,WAAW,CAAC,CAAC,CAAC;IAErC,IAAIC,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,GAAG,CAACM,MAAM,GAAG,CAAC,EAAED,CAAC,EAAE,EAAE;MACvC,IAAIL,GAAG,CAACK,CAAC,CAAC,KAAK,IAAI,IAAIL,GAAG,CAACK,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;QAC1CD,SAAS,GAAGC,CAAC;QACb;MACF;IACF;IAEA,IAAID,SAAS,KAAK,CAAC,CAAC,EAAE;MACpB,OAAO,KAAK;IACd;IAEA,IAAIA,SAAS,GAAG,CAAC,EAAE;MACjBJ,GAAG,GAAGA,GAAG,CAACO,KAAK,CAACH,SAAS,CAAC;IAC5B;IAEA,IAAIJ,GAAG,CAACM,MAAM,GAAG,CAAC,EAAE;MAClB,OAAO,KAAK;IACd;IAEA,MAAME,UAAU,GAAGC,QAAQ,CAACT,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC;IACnD,MAAMU,QAAQ,GAAG,CAAC,GAAGF,UAAU;IAE/B,IAAIR,GAAG,CAACM,MAAM,GAAGI,QAAQ,EAAE;MACzB,OAAO,KAAK;IACd;IAEA,OAAO,IAAI;EACb,CAAC;EAESC,mBAAmBA,CAC3BC,aAEC,EACe;IAChB,IAAIA,aAAa,CAACC,QAAQ,KAAKC,kBAAQ,CAACC,MAAM,EAAE;MAC9C;IACF;IAEA,IAAI,CAACH,aAAa,CAACI,kBAAkB,EAAE;MACrC,IAAI,CAACC,OAAO,GACV,IAAIC,KAAK,CACP,0CAA0CN,aAAa,CAACC,QAAQ,EAClE,CACF,CAAC;MAED;IACF;IAEA,IAAI,CAACM,sBAAsB,CAACP,aAAa,CAAC;EAC5C;EAEQO,sBAAsBA,CAC5BP,aAA+D,EACzD;IACN,MAAMQ,KAAK,GAAG,IAAI,CAACC,eAAe,CAACT,aAAa,CAAC;IAEjD,IAAIQ,KAAK,EAAE;MACT,IAAI,CAACH,OAAO,GAAGG,KAAK,CAAC;MAErB;IACF;IAEA,IAAI,CAACE,QAAQ,GAAGV,aAAa,CAAC;EAChC;;EAEA;AACF;AACA;AACA;AACA;EACUS,eAAeA,CACrBT,aAA+D,EAC3C;IACpB,MAAMW,QAA8C,GAAG,CACrD,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,IAAI,EACJ,IAAI,CACL;IAED,MAAMC,aAAa,GAAGD,QAAQ,CAACE,IAAI,CAChCC,GAAG,IAAKd,aAAa,CAACc,GAAG,CAAC,KAAKC,SAClC,CAAC;IAED,IAAI,CAACH,aAAa,EAAE;MAClB,OAAO,sDAAsD;IAC/D;IAEA,OAAOG,SAAS;EAClB;AACF;AAACC,OAAA,CAAAnC,UAAA,GAAAA,UAAA","ignoreList":[]}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.bc01MainServices = void 0;
7
+ var _core = require("@ovok/core");
8
+ var _caseType = require("../../../types/case-type.js");
9
+ /**
10
+ * Contec BC401 (a.k.a. BC01) urine analyzer — GATT profile.
11
+ *
12
+ * The BC401 uses Contec's proprietary FF12 service, shared across their consumer
13
+ * medical devices. A single result notification carries a 7-parameter URS-7
14
+ * strip readout expanded into eleven analyte values on the wire.
15
+ *
16
+ * Service 0xFF12
17
+ * Notify (result) 0xFF01 — CCCD 0x2902 must be written 01 00 to enable
18
+ * Write (command) 0xFF02 — RESET / SET_UNIT / REQUEST_HISTORY
19
+ *
20
+ * Wire layout of a result frame (Contec URS-7 firmware ≥ 1.2.x):
21
+ * [0..1] header "aa 55" — Contec sentinel
22
+ * [2] length byte after header
23
+ * [3] command "a1" == RESULT_URS7
24
+ * [4] strip type "07" == 7-panel
25
+ * [5..15] values one byte per analyte, encoding the discrete
26
+ * level index into diagnosticResults[key]
27
+ * [16] checksum xor over [2..15]
28
+ *
29
+ * Byte positions calibrated against PHMS 3.0.03 Android app; older firmware
30
+ * (< 1.2.x) uses a different command byte and is not supported by this driver
31
+ * (the validator will reject those frames).
32
+ */
33
+ const bc01MainServices = exports.bc01MainServices = [{
34
+ uuid: "0000ff12-0000-1000-8000-00805f9b34fb",
35
+ monitorUuids: [{
36
+ uuid: "0000ff01-0000-1000-8000-00805f9b34fb",
37
+ parsingModel: {
38
+ caseValuePosition: [0, 1, 3, 4],
39
+ cases: [{
40
+ measurementTypeKey: _core.MeasurementTypeKey.uricAcid,
41
+ caseType: _caseType.CaseType.RESULT,
42
+ caseValue: "aa55a107",
43
+ parseDefinitions: [{
44
+ name: "uro",
45
+ parseType: "number",
46
+ byteIndexes: [5],
47
+ parseReference: 16
48
+ }, {
49
+ name: "bld",
50
+ parseType: "number",
51
+ byteIndexes: [6],
52
+ parseReference: 16
53
+ }, {
54
+ name: "bil",
55
+ parseType: "number",
56
+ byteIndexes: [7],
57
+ parseReference: 16
58
+ }, {
59
+ name: "ket",
60
+ parseType: "number",
61
+ byteIndexes: [8],
62
+ parseReference: 16
63
+ }, {
64
+ name: "glu",
65
+ parseType: "number",
66
+ byteIndexes: [9],
67
+ parseReference: 16
68
+ }, {
69
+ name: "pro",
70
+ parseType: "number",
71
+ byteIndexes: [10],
72
+ parseReference: 16
73
+ }, {
74
+ name: "ph",
75
+ parseType: "number",
76
+ byteIndexes: [11],
77
+ parseReference: 16
78
+ }, {
79
+ name: "nit",
80
+ parseType: "number",
81
+ byteIndexes: [12],
82
+ parseReference: 16
83
+ }, {
84
+ name: "leu",
85
+ parseType: "number",
86
+ byteIndexes: [13],
87
+ parseReference: 16
88
+ }, {
89
+ name: "sg",
90
+ parseType: "number",
91
+ byteIndexes: [14],
92
+ parseReference: 16
93
+ }, {
94
+ name: "vc",
95
+ parseType: "number",
96
+ byteIndexes: [15],
97
+ parseReference: 16
98
+ }]
99
+ }]
100
+ }
101
+ }]
102
+ }];
103
+ //# sourceMappingURL=bc01.main-services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_core","require","_caseType","bc01MainServices","exports","uuid","monitorUuids","parsingModel","caseValuePosition","cases","measurementTypeKey","MeasurementTypeKey","uricAcid","caseType","CaseType","RESULT","caseValue","parseDefinitions","name","parseType","byteIndexes","parseReference"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bc01/bc01.main-services.ts"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEA,IAAAC,SAAA,GAAAD,OAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAME,gBAA4B,GAAAC,OAAA,CAAAD,gBAAA,GAAG,CAC1C;EACEE,IAAI,EAAE,sCAAsC;EAC5CC,YAAY,EAAE,CACZ;IACED,IAAI,EAAE,sCAAsC;IAC5CE,YAAY,EAAE;MACZC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MAC/BC,KAAK,EAAE,CACL;QACEC,kBAAkB,EAAEC,wBAAkB,CAACC,QAAQ;QAC/CC,QAAQ,EAAEC,kBAAQ,CAACC,MAAM;QACzBC,SAAS,EAAE,UAAU;QACrBC,gBAAgB,EAAE,CAChB;UACEC,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,CAAC;UAChBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,CAAC;UAChBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,CAAC;UAChBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,CAAC;UAChBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,CAAC;UAChBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,EAAE,CAAC;UACjBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,IAAI;UACVC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,EAAE,CAAC;UACjBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,EAAE,CAAC;UACjBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,EAAE,CAAC;UACjBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,IAAI;UACVC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,EAAE,CAAC;UACjBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,IAAI;UACVC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,EAAE,CAAC;UACjBC,cAAc,EAAE;QAClB,CAAC;MAEL,CAAC;IAEL;EACF,CAAC;AAEL,CAAC,CACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_integratedDevices","require"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/device-measurement-map.ts"],"mappings":";;AAQA,IAAAA,kBAAA,GAAAC,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["_integratedDevices","require"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/device-measurement-map.ts"],"mappings":";;AASA,IAAAA,kBAAA,GAAAC,OAAA","ignoreList":[]}
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { integratedDevicesMap } from "../constants/integrated-devices-map.js";
4
4
  import { IntegratedDevices } from "../types/integrated-devices.js";
5
+ import { BC01Device } from "./devices/bc01/bc01.device.js";
5
6
  import { BP2Device } from "./devices/bp2/bp2.device.js";
6
7
  import { F4Device } from "./devices/f4/f4.device.js";
7
8
  import { SPO2Device } from "./devices/spo/spo2.device.js";
@@ -37,7 +38,8 @@ export class DeviceCreator {
37
38
  const deviceMap = {
38
39
  [IntegratedDevices.BP2]: BP2Device,
39
40
  [IntegratedDevices.F4]: F4Device,
40
- [IntegratedDevices.PC60WF]: SPO2Device
41
+ [IntegratedDevices.PC60WF]: SPO2Device,
42
+ [IntegratedDevices.BC01]: BC01Device
41
43
  };
42
44
  const deviceClass = deviceMap[params.deviceName];
43
45
  if (!deviceClass) {
@@ -1 +1 @@
1
- {"version":3,"names":["integratedDevicesMap","IntegratedDevices","BP2Device","F4Device","SPO2Device","DeviceCreator","deviceNameCache","Map","CACHE_MAX_SIZE","constructor","acceptedDeviceNames","getDeviceName","foundName","deviceName","getIntegratedDeviceName","some","name","createDevice","params","trim","Error","device","id","deviceMap","BP2","F4","PC60WF","deviceClass","destroy","clear","undefined","has","cached","get","matchedDevice","regex","deviceType","test","cacheDeviceName","size","firstKey","keys","next","value","delete","set"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/services/device-creator.ts"],"mappings":";;AAAA,SAASA,oBAAoB,QAAQ,wCAAqC;AAE1E,SAASC,iBAAiB,QAAQ,gCAA6B;AAE/D,SAASC,SAAS,QAAQ,6BAA0B;AAEpD,SAASC,QAAQ,QAAQ,2BAAwB;AACjD,SAASC,UAAU,QAAQ,8BAA2B;AAEtD,OAAO,MAAMC,aAAa,CAAyC;EACzDC,eAAe,GAAG,IAAIC,GAAG,CAAmC,CAAC;EACpDC,cAAc,GAAG,GAAG;EAErCC,WAAWA,CAAkBC,mBAAsB,EAAE;IAAA,KAAxBA,mBAAsB,GAAtBA,mBAAsB;EAAG;EAE/CC,aAAa,GAAIC,SAAiB,IAAoC;IAC3E,MAAMC,UAAU,GAAG,IAAI,CAACC,uBAAuB,CAACF,SAAS,CAAC;IAE1D,IAAI,CAACC,UAAU,EAAE;MACf;IACF;IAEA,IAAI,CAAC,IAAI,CAACH,mBAAmB,CAACK,IAAI,CAAEC,IAAI,IAAKA,IAAI,KAAKH,UAAU,CAAC,EAAE;MACjE;IACF;IAEA,OAAOA,UAAU;EACnB,CAAC;EAEMI,YAAYA,CACjBC,MAA6B,EACT;IACpB,IAAI,CAACA,MAAM,CAACL,UAAU,CAACM,IAAI,CAAC,CAAC,EAAE;MAC7B,MAAM,IAAIC,KAAK,CAAC,yBAAyB,CAAC;IAC5C;IAEA,IAAI,CAACF,MAAM,CAACG,MAAM,EAAE;MAClB,MAAM,IAAID,KAAK,CAAC,oBAAoB,CAAC;IACvC;IAEA,IAAI,CAACF,MAAM,CAACG,MAAM,CAACL,IAAI,EAAEG,IAAI,CAAC,CAAC,EAAE;MAC/B,MAAM,IAAIC,KAAK,CAAC,yBAAyB,CAAC;IAC5C;IACA,IAAI,CAACF,MAAM,CAACG,MAAM,CAACC,EAAE,EAAE;MACrB,MAAM,IAAIF,KAAK,CAAC,uBAAuB,CAAC;IAC1C;IAEA,MAAMG,SAAS,GAAG;MAChB,CAACtB,iBAAiB,CAACuB,GAAG,GAAGtB,SAAS;MAClC,CAACD,iBAAiB,CAACwB,EAAE,GAAGtB,QAAQ;MAChC,CAACF,iBAAiB,CAACyB,MAAM,GAAGtB;IAC9B,CAAC;IAED,MAAMuB,WAAW,GAAGJ,SAAS,CAACL,MAAM,CAACL,UAAU,CAA2B;IAE1E,IAAI,CAACc,WAAW,EAAE;MAChB,MAAM,IAAIP,KAAK,CAAC,UAAUF,MAAM,CAACG,MAAM,CAACL,IAAI,YAAY,CAAC;IAC3D;;IAEA;IACA,OAAO,IAAIW,WAAW,CAACT,MAAM,CAACG,MAAM,EAAEH,MAAM,CAAC;EAC/C;EAEOU,OAAO,GAAGA,CAAA,KAAM;IACrB,IAAI,CAACtB,eAAe,CAACuB,KAAK,CAAC,CAAC;EAC9B,CAAC;EAEOf,uBAAuB,GAC7BD,UAAkB,IACgB;IAClC,IAAI,CAACA,UAAU,EAAE;MACf,OAAOiB,SAAS;IAClB;;IAEA;IACA,IAAI,IAAI,CAACxB,eAAe,CAACyB,GAAG,CAAClB,UAAU,CAAC,EAAE;MACxC,MAAMmB,MAAM,GAAG,IAAI,CAAC1B,eAAe,CAAC2B,GAAG,CAACpB,UAAU,CAAC;MAEnD,OAAOmB,MAAM,IAAIF,SAAS;IAC5B;;IAEA;IACA,IAAII,aAA4C;IAEhD,KAAK,MAAM,CAACC,KAAK,EAAEC,UAAU,CAAC,IAAIpC,oBAAoB,EAAE;MACtD,IAAImC,KAAK,CAACE,IAAI,CAACxB,UAAU,CAAC,EAAE;QAC1BqB,aAAa,GAAGE,UAAU;QAC1B,MAAM,CAAC;MACT;IACF;;IAEA;IACA,IAAI,CAACE,eAAe,CAACzB,UAAU,EAAEqB,aAAa,IAAI,IAAI,CAAC;IAEvD,OAAOA,aAAa;EACtB,CAAC;EAEOI,eAAeA,CACrBzB,UAAkB,EAClBuB,UAAoC,EAC9B;IACN;IACA,IAAI,IAAI,CAAC9B,eAAe,CAACiC,IAAI,IAAI,IAAI,CAAC/B,cAAc,EAAE;MACpD,MAAMgC,QAAQ,GAAG,IAAI,CAAClC,eAAe,CAACmC,IAAI,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,KAAK;MAEzD,IAAIH,QAAQ,KAAKV,SAAS,EAAE;QAC1B,IAAI,CAACxB,eAAe,CAACsC,MAAM,CAACJ,QAAQ,CAAC;MACvC;IACF;IAEA,IAAI,CAAClC,eAAe,CAACuC,GAAG,CAAChC,UAAU,EAAEuB,UAAU,CAAC;EAClD;AACF","ignoreList":[]}
1
+ {"version":3,"names":["integratedDevicesMap","IntegratedDevices","BC01Device","BP2Device","F4Device","SPO2Device","DeviceCreator","deviceNameCache","Map","CACHE_MAX_SIZE","constructor","acceptedDeviceNames","getDeviceName","foundName","deviceName","getIntegratedDeviceName","some","name","createDevice","params","trim","Error","device","id","deviceMap","BP2","F4","PC60WF","BC01","deviceClass","destroy","clear","undefined","has","cached","get","matchedDevice","regex","deviceType","test","cacheDeviceName","size","firstKey","keys","next","value","delete","set"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/services/device-creator.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ import { CaseType } from "../../../types/case-type.js";
4
+ import { BTManagedDevice } from "../bt-managed-device.js";
5
+ import { bc01MainServices } from "./bc01.main-services.js";
6
+
7
+ /**
8
+ * Contec BC401 (BC01) urine analyzer driver.
9
+ *
10
+ * The BC401 is a single-shot device: the patient dips a URS-7 strip, presses
11
+ * the button, and the device pushes exactly one result frame on 0xFF01. There
12
+ * is no streaming state, no per-tick updates, and no measurement session to
13
+ * open — the device auto-starts on button press.
14
+ */
15
+ export class BC01Device extends BTManagedDevice {
16
+ onStreamStart = () => {};
17
+ mainServices = bc01MainServices;
18
+
19
+ /**
20
+ * 90 s covers the maximum firmware-side reagent-pad settle time on a URS-7
21
+ * strip. If the device does not push a result frame within that window the
22
+ * data-processor times out and the driver surfaces "device unreachable".
23
+ */
24
+ stuckDataTimeout = 90_000;
25
+ validatePackage = pkg => {
26
+ pkg = pkg.map(b => b.toLowerCase());
27
+ let headIndex = -1;
28
+ for (let i = 0; i < pkg.length - 1; i++) {
29
+ if (pkg[i] === "aa" && pkg[i + 1] === "55") {
30
+ headIndex = i;
31
+ break;
32
+ }
33
+ }
34
+ if (headIndex === -1) {
35
+ return false;
36
+ }
37
+ if (headIndex > 0) {
38
+ pkg = pkg.slice(headIndex);
39
+ }
40
+ if (pkg.length < 5) {
41
+ return false;
42
+ }
43
+ const lengthByte = parseInt(pkg[2] ?? "0", 16) || 0;
44
+ const totalLen = 3 + lengthByte;
45
+ if (pkg.length < totalLen) {
46
+ return false;
47
+ }
48
+ return true;
49
+ };
50
+ handleSuccessResult(successResult) {
51
+ if (successResult.caseType !== CaseType.RESULT) {
52
+ return;
53
+ }
54
+ if (!successResult.measurementTypeKey) {
55
+ this.onError?.(new Error(`Measurement type is undefined for case ${successResult.caseType}`));
56
+ return;
57
+ }
58
+ this.handleUrinalysisResult(successResult);
59
+ }
60
+ handleUrinalysisResult(successResult) {
61
+ const error = this.checkIfHasError(successResult);
62
+ if (error) {
63
+ this.onError?.(error);
64
+ return;
65
+ }
66
+ this.onResult?.(successResult);
67
+ }
68
+
69
+ /**
70
+ * A well-formed frame with all analyte fields still undefined means the
71
+ * device produced an empty read — typically a strip inserted upside down or
72
+ * removed before the reagent-pad timer completed.
73
+ */
74
+ checkIfHasError(successResult) {
75
+ const analytes = ["uro", "bld", "bil", "ket", "glu", "pro", "ph", "nit", "leu", "sg", "vc"];
76
+ const hasAnyReading = analytes.some(key => successResult[key] !== undefined);
77
+ if (!hasAnyReading) {
78
+ return "feedback-messages.measurement.disturb-detected-error";
79
+ }
80
+ return undefined;
81
+ }
82
+ }
83
+ //# sourceMappingURL=bc01.device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CaseType","BTManagedDevice","bc01MainServices","BC01Device","onStreamStart","mainServices","stuckDataTimeout","validatePackage","pkg","map","b","toLowerCase","headIndex","i","length","slice","lengthByte","parseInt","totalLen","handleSuccessResult","successResult","caseType","RESULT","measurementTypeKey","onError","Error","handleUrinalysisResult","error","checkIfHasError","onResult","analytes","hasAnyReading","some","key","undefined"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bc01/bc01.device.ts"],"mappings":";;AAEA,SAASA,QAAQ,QAAQ,6BAA0B;AAKnD,SAASC,eAAe,QAAQ,yBAAsB;AAEtD,SAASC,gBAAgB,QAAQ,yBAAsB;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,SAASF,eAAe,CAAyB;EAC5DG,aAAa,GAAeA,CAAA,KAAM,CAAC,CAAC;EAEpCC,YAAY,GAAeH,gBAAgB;;EAErD;AACF;AACA;AACA;AACA;EACYI,gBAAgB,GAAG,MAAM;EAEzBC,eAAe,GAAgCC,GAAG,IAAK;IAC/DA,GAAG,GAAGA,GAAG,CAACC,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,WAAW,CAAC,CAAC,CAAC;IAErC,IAAIC,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,GAAG,CAACM,MAAM,GAAG,CAAC,EAAED,CAAC,EAAE,EAAE;MACvC,IAAIL,GAAG,CAACK,CAAC,CAAC,KAAK,IAAI,IAAIL,GAAG,CAACK,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;QAC1CD,SAAS,GAAGC,CAAC;QACb;MACF;IACF;IAEA,IAAID,SAAS,KAAK,CAAC,CAAC,EAAE;MACpB,OAAO,KAAK;IACd;IAEA,IAAIA,SAAS,GAAG,CAAC,EAAE;MACjBJ,GAAG,GAAGA,GAAG,CAACO,KAAK,CAACH,SAAS,CAAC;IAC5B;IAEA,IAAIJ,GAAG,CAACM,MAAM,GAAG,CAAC,EAAE;MAClB,OAAO,KAAK;IACd;IAEA,MAAME,UAAU,GAAGC,QAAQ,CAACT,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC;IACnD,MAAMU,QAAQ,GAAG,CAAC,GAAGF,UAAU;IAE/B,IAAIR,GAAG,CAACM,MAAM,GAAGI,QAAQ,EAAE;MACzB,OAAO,KAAK;IACd;IAEA,OAAO,IAAI;EACb,CAAC;EAESC,mBAAmBA,CAC3BC,aAEC,EACe;IAChB,IAAIA,aAAa,CAACC,QAAQ,KAAKrB,QAAQ,CAACsB,MAAM,EAAE;MAC9C;IACF;IAEA,IAAI,CAACF,aAAa,CAACG,kBAAkB,EAAE;MACrC,IAAI,CAACC,OAAO,GACV,IAAIC,KAAK,CACP,0CAA0CL,aAAa,CAACC,QAAQ,EAClE,CACF,CAAC;MAED;IACF;IAEA,IAAI,CAACK,sBAAsB,CAACN,aAAa,CAAC;EAC5C;EAEQM,sBAAsBA,CAC5BN,aAA+D,EACzD;IACN,MAAMO,KAAK,GAAG,IAAI,CAACC,eAAe,CAACR,aAAa,CAAC;IAEjD,IAAIO,KAAK,EAAE;MACT,IAAI,CAACH,OAAO,GAAGG,KAAK,CAAC;MAErB;IACF;IAEA,IAAI,CAACE,QAAQ,GAAGT,aAAa,CAAC;EAChC;;EAEA;AACF;AACA;AACA;AACA;EACUQ,eAAeA,CACrBR,aAA+D,EAC3C;IACpB,MAAMU,QAA8C,GAAG,CACrD,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,IAAI,EACJ,IAAI,CACL;IAED,MAAMC,aAAa,GAAGD,QAAQ,CAACE,IAAI,CAChCC,GAAG,IAAKb,aAAa,CAACa,GAAG,CAAC,KAAKC,SAClC,CAAC;IAED,IAAI,CAACH,aAAa,EAAE;MAClB,OAAO,sDAAsD;IAC/D;IAEA,OAAOG,SAAS;EAClB;AACF","ignoreList":[]}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ import { MeasurementTypeKey } from "@ovok/core";
4
+ import { CaseType } from "../../../types/case-type.js";
5
+ /**
6
+ * Contec BC401 (a.k.a. BC01) urine analyzer — GATT profile.
7
+ *
8
+ * The BC401 uses Contec's proprietary FF12 service, shared across their consumer
9
+ * medical devices. A single result notification carries a 7-parameter URS-7
10
+ * strip readout expanded into eleven analyte values on the wire.
11
+ *
12
+ * Service 0xFF12
13
+ * Notify (result) 0xFF01 — CCCD 0x2902 must be written 01 00 to enable
14
+ * Write (command) 0xFF02 — RESET / SET_UNIT / REQUEST_HISTORY
15
+ *
16
+ * Wire layout of a result frame (Contec URS-7 firmware ≥ 1.2.x):
17
+ * [0..1] header "aa 55" — Contec sentinel
18
+ * [2] length byte after header
19
+ * [3] command "a1" == RESULT_URS7
20
+ * [4] strip type "07" == 7-panel
21
+ * [5..15] values one byte per analyte, encoding the discrete
22
+ * level index into diagnosticResults[key]
23
+ * [16] checksum xor over [2..15]
24
+ *
25
+ * Byte positions calibrated against PHMS 3.0.03 Android app; older firmware
26
+ * (< 1.2.x) uses a different command byte and is not supported by this driver
27
+ * (the validator will reject those frames).
28
+ */
29
+ export const bc01MainServices = [{
30
+ uuid: "0000ff12-0000-1000-8000-00805f9b34fb",
31
+ monitorUuids: [{
32
+ uuid: "0000ff01-0000-1000-8000-00805f9b34fb",
33
+ parsingModel: {
34
+ caseValuePosition: [0, 1, 3, 4],
35
+ cases: [{
36
+ measurementTypeKey: MeasurementTypeKey.uricAcid,
37
+ caseType: CaseType.RESULT,
38
+ caseValue: "aa55a107",
39
+ parseDefinitions: [{
40
+ name: "uro",
41
+ parseType: "number",
42
+ byteIndexes: [5],
43
+ parseReference: 16
44
+ }, {
45
+ name: "bld",
46
+ parseType: "number",
47
+ byteIndexes: [6],
48
+ parseReference: 16
49
+ }, {
50
+ name: "bil",
51
+ parseType: "number",
52
+ byteIndexes: [7],
53
+ parseReference: 16
54
+ }, {
55
+ name: "ket",
56
+ parseType: "number",
57
+ byteIndexes: [8],
58
+ parseReference: 16
59
+ }, {
60
+ name: "glu",
61
+ parseType: "number",
62
+ byteIndexes: [9],
63
+ parseReference: 16
64
+ }, {
65
+ name: "pro",
66
+ parseType: "number",
67
+ byteIndexes: [10],
68
+ parseReference: 16
69
+ }, {
70
+ name: "ph",
71
+ parseType: "number",
72
+ byteIndexes: [11],
73
+ parseReference: 16
74
+ }, {
75
+ name: "nit",
76
+ parseType: "number",
77
+ byteIndexes: [12],
78
+ parseReference: 16
79
+ }, {
80
+ name: "leu",
81
+ parseType: "number",
82
+ byteIndexes: [13],
83
+ parseReference: 16
84
+ }, {
85
+ name: "sg",
86
+ parseType: "number",
87
+ byteIndexes: [14],
88
+ parseReference: 16
89
+ }, {
90
+ name: "vc",
91
+ parseType: "number",
92
+ byteIndexes: [15],
93
+ parseReference: 16
94
+ }]
95
+ }]
96
+ }
97
+ }]
98
+ }];
99
+ //# sourceMappingURL=bc01.main-services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MeasurementTypeKey","CaseType","bc01MainServices","uuid","monitorUuids","parsingModel","caseValuePosition","cases","measurementTypeKey","uricAcid","caseType","RESULT","caseValue","parseDefinitions","name","parseType","byteIndexes","parseReference"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bc01/bc01.main-services.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,YAAY;AAE/C,SAASC,QAAQ,QAAQ,6BAA0B;AAGnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAA4B,GAAG,CAC1C;EACEC,IAAI,EAAE,sCAAsC;EAC5CC,YAAY,EAAE,CACZ;IACED,IAAI,EAAE,sCAAsC;IAC5CE,YAAY,EAAE;MACZC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MAC/BC,KAAK,EAAE,CACL;QACEC,kBAAkB,EAAER,kBAAkB,CAACS,QAAQ;QAC/CC,QAAQ,EAAET,QAAQ,CAACU,MAAM;QACzBC,SAAS,EAAE,UAAU;QACrBC,gBAAgB,EAAE,CAChB;UACEC,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,CAAC;UAChBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,CAAC;UAChBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,CAAC;UAChBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,CAAC;UAChBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,CAAC,CAAC;UAChBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,EAAE,CAAC;UACjBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,IAAI;UACVC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,EAAE,CAAC;UACjBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,EAAE,CAAC;UACjBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,KAAK;UACXC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,EAAE,CAAC;UACjBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,IAAI;UACVC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,EAAE,CAAC;UACjBC,cAAc,EAAE;QAClB,CAAC,EACD;UACEH,IAAI,EAAE,IAAI;UACVC,SAAS,EAAE,QAAQ;UACnBC,WAAW,EAAE,CAAC,EAAE,CAAC;UACjBC,cAAc,EAAE;QAClB,CAAC;MAEL,CAAC;IAEL;EACF,CAAC;AAEL,CAAC,CACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["IntegratedDevices"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/device-measurement-map.ts"],"mappings":";;AAQA,SAASA,iBAAiB,QAAQ,yBAAsB","ignoreList":[]}
1
+ {"version":3,"names":["IntegratedDevices"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/device-measurement-map.ts"],"mappings":";;AASA,SAASA,iBAAiB,QAAQ,yBAAsB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"device-creator.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/services/device-creator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAI9D,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,iBAAiB,EAAE;IAInD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAHhD,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;gBAET,mBAAmB,EAAE,CAAC;IAE5C,aAAa,GAAI,WAAW,MAAM,KAAG,iBAAiB,GAAG,SAAS,CAYvE;IAEK,YAAY,CAAC,CAAC,SAAS,iBAAiB,EAC7C,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC5B,eAAe,CAAC,CAAC,CAAC;IAgCd,OAAO,aAEZ;IAEF,OAAO,CAAC,uBAAuB,CA4B7B;IAEF,OAAO,CAAC,eAAe;CAexB"}
1
+ {"version":3,"file":"device-creator.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/services/device-creator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAIhE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAI9D,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,iBAAiB,EAAE;IAInD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAHhD,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;gBAET,mBAAmB,EAAE,CAAC;IAE5C,aAAa,GAAI,WAAW,MAAM,KAAG,iBAAiB,GAAG,SAAS,CAYvE;IAEK,YAAY,CAAC,CAAC,SAAS,iBAAiB,EAC7C,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC5B,eAAe,CAAC,CAAC,CAAC;IAiCd,OAAO,aAEZ;IAEF,OAAO,CAAC,uBAAuB,CA4B7B;IAEF,OAAO,CAAC,eAAe;CAexB"}
@@ -0,0 +1,33 @@
1
+ import { MeasurementTypeForDevices } from "../../../types/device-measurement-map";
2
+ import { IntegratedDevices } from "../../../types/integrated-devices";
3
+ import { MeasurementWithCaseType } from "../../../types/measurement-with-case-type";
4
+ import { IService } from "../../../types/service.type";
5
+ import { BTManagedDevice } from "../bt-managed-device";
6
+ /**
7
+ * Contec BC401 (BC01) urine analyzer driver.
8
+ *
9
+ * The BC401 is a single-shot device: the patient dips a URS-7 strip, presses
10
+ * the button, and the device pushes exactly one result frame on 0xFF01. There
11
+ * is no streaming state, no per-tick updates, and no measurement session to
12
+ * open — the device auto-starts on button press.
13
+ */
14
+ export declare class BC01Device extends BTManagedDevice<IntegratedDevices.BC01> {
15
+ protected onStreamStart: () => void;
16
+ protected mainServices: IService[];
17
+ /**
18
+ * 90 s covers the maximum firmware-side reagent-pad settle time on a URS-7
19
+ * strip. If the device does not push a result frame within that window the
20
+ * data-processor times out and the driver surfaces "device unreachable".
21
+ */
22
+ protected stuckDataTimeout: number;
23
+ protected validatePackage: (pkg: string[]) => boolean;
24
+ protected handleSuccessResult(successResult: MeasurementWithCaseType<MeasurementTypeForDevices<[IntegratedDevices.BC01]>>): void | boolean;
25
+ private handleUrinalysisResult;
26
+ /**
27
+ * A well-formed frame with all analyte fields still undefined means the
28
+ * device produced an empty read — typically a strip inserted upside down or
29
+ * removed before the reagent-pad timer completed.
30
+ */
31
+ private checkIfHasError;
32
+ }
33
+ //# sourceMappingURL=bc01.device.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bc01.device.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/bc01/bc01.device.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD;;;;;;;GAOG;AACH,qBAAa,UAAW,SAAQ,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC;IACrE,SAAS,CAAC,aAAa,EAAE,MAAM,IAAI,CAAY;IAE/C,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAoB;IAEtD;;;;OAIG;IACH,SAAS,CAAC,gBAAgB,SAAU;IAEpC,SAAS,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,OAAO,CAgCnD;IAEF,SAAS,CAAC,mBAAmB,CAC3B,aAAa,EAAE,uBAAuB,CACpC,yBAAyB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACpD,GACA,IAAI,GAAG,OAAO;IAkBjB,OAAO,CAAC,sBAAsB;IAc9B;;;;OAIG;IACH,OAAO,CAAC,eAAe;CA2BxB"}
@@ -0,0 +1,27 @@
1
+ import { IService } from "../../../types/service.type";
2
+ /**
3
+ * Contec BC401 (a.k.a. BC01) urine analyzer — GATT profile.
4
+ *
5
+ * The BC401 uses Contec's proprietary FF12 service, shared across their consumer
6
+ * medical devices. A single result notification carries a 7-parameter URS-7
7
+ * strip readout expanded into eleven analyte values on the wire.
8
+ *
9
+ * Service 0xFF12
10
+ * Notify (result) 0xFF01 — CCCD 0x2902 must be written 01 00 to enable
11
+ * Write (command) 0xFF02 — RESET / SET_UNIT / REQUEST_HISTORY
12
+ *
13
+ * Wire layout of a result frame (Contec URS-7 firmware ≥ 1.2.x):
14
+ * [0..1] header "aa 55" — Contec sentinel
15
+ * [2] length byte after header
16
+ * [3] command "a1" == RESULT_URS7
17
+ * [4] strip type "07" == 7-panel
18
+ * [5..15] values one byte per analyte, encoding the discrete
19
+ * level index into diagnosticResults[key]
20
+ * [16] checksum xor over [2..15]
21
+ *
22
+ * Byte positions calibrated against PHMS 3.0.03 Android app; older firmware
23
+ * (< 1.2.x) uses a different command byte and is not supported by this driver
24
+ * (the validator will reject those frames).
25
+ */
26
+ export declare const bc01MainServices: IService[];
27
+ //# sourceMappingURL=bc01.main-services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bc01.main-services.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/bc01/bc01.main-services.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,EAuFtC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { BloodPressureMeasurement, BodyWeightMeasurement, EcgMeasurement, PulseOximeterMeasurement } from "@ovok/core";
1
+ import { BloodPressureMeasurement, BodyWeightMeasurement, EcgMeasurement, PulseOximeterMeasurement, UrineAnalyzeMeasurement } from "@ovok/core";
2
2
  import { CaseType } from "./case-type";
3
3
  import { IntegratedDevices } from "./integrated-devices";
4
4
  interface DeviceMeasurementMap {
@@ -12,7 +12,7 @@ interface DeviceMeasurementMap {
12
12
  [IntegratedDevices.ANDESFITTEMP]: never;
13
13
  [IntegratedDevices.FORATEMP]: never;
14
14
  [IntegratedDevices.COSINUSS]: never;
15
- [IntegratedDevices.BC01]: never;
15
+ [IntegratedDevices.BC01]: UrineAnalyzeMeasurement;
16
16
  [IntegratedDevices.FORA_SCALE]: never;
17
17
  [IntegratedDevices.RPM_SCALE]: never;
18
18
  [IntegratedDevices.CLEVERTEMP]: never;
@@ -1 +1 @@
1
- {"version":3,"file":"device-measurement-map.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/types/device-measurement-map.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,UAAU,oBAAoB;IAC5B,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC;IAC9C,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,wBAAwB,GAAG,cAAc,CAAC;IACnE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,wBAAwB,CAAC;IACnD,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IAClC,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,wBAAwB,CAAC;IACrD,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC;IAC1C,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACtC,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;IACxC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpC,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IAChC,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACtC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;IACrC,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACtC,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IAChC,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACjC,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;IAC9B,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;IACrC,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;CAChC;AAED,MAAM,MAAM,yBAAyB,CAAC,CAAC,SAAS,SAAS,iBAAiB,EAAE,IAC1E;KACG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG;QAAE,QAAQ,EAAE,QAAQ,CAAA;KAAE;CACnE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"device-measurement-map.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/types/device-measurement-map.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,UAAU,oBAAoB;IAC5B,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC;IAC9C,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,wBAAwB,GAAG,cAAc,CAAC;IACnE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,wBAAwB,CAAC;IACnD,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IAClC,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,wBAAwB,CAAC;IACrD,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC;IAC1C,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACtC,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;IACxC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpC,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC;IAClD,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACtC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;IACrC,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACtC,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IAChC,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACjC,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;IAC9B,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;IACrC,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;CAChC;AAED,MAAM,MAAM,yBAAyB,CAAC,CAAC,SAAS,SAAS,iBAAiB,EAAE,IAC1E;KACG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG;QAAE,QAAQ,EAAE,QAAQ,CAAA;KAAE;CACnE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"device-creator.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/services/device-creator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAI9D,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,iBAAiB,EAAE;IAInD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAHhD,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;gBAET,mBAAmB,EAAE,CAAC;IAE5C,aAAa,GAAI,WAAW,MAAM,KAAG,iBAAiB,GAAG,SAAS,CAYvE;IAEK,YAAY,CAAC,CAAC,SAAS,iBAAiB,EAC7C,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC5B,eAAe,CAAC,CAAC,CAAC;IAgCd,OAAO,aAEZ;IAEF,OAAO,CAAC,uBAAuB,CA4B7B;IAEF,OAAO,CAAC,eAAe;CAexB"}
1
+ {"version":3,"file":"device-creator.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/services/device-creator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAIhE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAI9D,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,iBAAiB,EAAE;IAInD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAHhD,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;gBAET,mBAAmB,EAAE,CAAC;IAE5C,aAAa,GAAI,WAAW,MAAM,KAAG,iBAAiB,GAAG,SAAS,CAYvE;IAEK,YAAY,CAAC,CAAC,SAAS,iBAAiB,EAC7C,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC5B,eAAe,CAAC,CAAC,CAAC;IAiCd,OAAO,aAEZ;IAEF,OAAO,CAAC,uBAAuB,CA4B7B;IAEF,OAAO,CAAC,eAAe;CAexB"}
@@ -0,0 +1,33 @@
1
+ import { MeasurementTypeForDevices } from "../../../types/device-measurement-map";
2
+ import { IntegratedDevices } from "../../../types/integrated-devices";
3
+ import { MeasurementWithCaseType } from "../../../types/measurement-with-case-type";
4
+ import { IService } from "../../../types/service.type";
5
+ import { BTManagedDevice } from "../bt-managed-device";
6
+ /**
7
+ * Contec BC401 (BC01) urine analyzer driver.
8
+ *
9
+ * The BC401 is a single-shot device: the patient dips a URS-7 strip, presses
10
+ * the button, and the device pushes exactly one result frame on 0xFF01. There
11
+ * is no streaming state, no per-tick updates, and no measurement session to
12
+ * open — the device auto-starts on button press.
13
+ */
14
+ export declare class BC01Device extends BTManagedDevice<IntegratedDevices.BC01> {
15
+ protected onStreamStart: () => void;
16
+ protected mainServices: IService[];
17
+ /**
18
+ * 90 s covers the maximum firmware-side reagent-pad settle time on a URS-7
19
+ * strip. If the device does not push a result frame within that window the
20
+ * data-processor times out and the driver surfaces "device unreachable".
21
+ */
22
+ protected stuckDataTimeout: number;
23
+ protected validatePackage: (pkg: string[]) => boolean;
24
+ protected handleSuccessResult(successResult: MeasurementWithCaseType<MeasurementTypeForDevices<[IntegratedDevices.BC01]>>): void | boolean;
25
+ private handleUrinalysisResult;
26
+ /**
27
+ * A well-formed frame with all analyte fields still undefined means the
28
+ * device produced an empty read — typically a strip inserted upside down or
29
+ * removed before the reagent-pad timer completed.
30
+ */
31
+ private checkIfHasError;
32
+ }
33
+ //# sourceMappingURL=bc01.device.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bc01.device.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/bc01/bc01.device.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD;;;;;;;GAOG;AACH,qBAAa,UAAW,SAAQ,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC;IACrE,SAAS,CAAC,aAAa,EAAE,MAAM,IAAI,CAAY;IAE/C,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAoB;IAEtD;;;;OAIG;IACH,SAAS,CAAC,gBAAgB,SAAU;IAEpC,SAAS,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,OAAO,CAgCnD;IAEF,SAAS,CAAC,mBAAmB,CAC3B,aAAa,EAAE,uBAAuB,CACpC,yBAAyB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACpD,GACA,IAAI,GAAG,OAAO;IAkBjB,OAAO,CAAC,sBAAsB;IAc9B;;;;OAIG;IACH,OAAO,CAAC,eAAe;CA2BxB"}
@@ -0,0 +1,27 @@
1
+ import { IService } from "../../../types/service.type";
2
+ /**
3
+ * Contec BC401 (a.k.a. BC01) urine analyzer — GATT profile.
4
+ *
5
+ * The BC401 uses Contec's proprietary FF12 service, shared across their consumer
6
+ * medical devices. A single result notification carries a 7-parameter URS-7
7
+ * strip readout expanded into eleven analyte values on the wire.
8
+ *
9
+ * Service 0xFF12
10
+ * Notify (result) 0xFF01 — CCCD 0x2902 must be written 01 00 to enable
11
+ * Write (command) 0xFF02 — RESET / SET_UNIT / REQUEST_HISTORY
12
+ *
13
+ * Wire layout of a result frame (Contec URS-7 firmware ≥ 1.2.x):
14
+ * [0..1] header "aa 55" — Contec sentinel
15
+ * [2] length byte after header
16
+ * [3] command "a1" == RESULT_URS7
17
+ * [4] strip type "07" == 7-panel
18
+ * [5..15] values one byte per analyte, encoding the discrete
19
+ * level index into diagnosticResults[key]
20
+ * [16] checksum xor over [2..15]
21
+ *
22
+ * Byte positions calibrated against PHMS 3.0.03 Android app; older firmware
23
+ * (< 1.2.x) uses a different command byte and is not supported by this driver
24
+ * (the validator will reject those frames).
25
+ */
26
+ export declare const bc01MainServices: IService[];
27
+ //# sourceMappingURL=bc01.main-services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bc01.main-services.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/bc01/bc01.main-services.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,EAuFtC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { BloodPressureMeasurement, BodyWeightMeasurement, EcgMeasurement, PulseOximeterMeasurement } from "@ovok/core";
1
+ import { BloodPressureMeasurement, BodyWeightMeasurement, EcgMeasurement, PulseOximeterMeasurement, UrineAnalyzeMeasurement } from "@ovok/core";
2
2
  import { CaseType } from "./case-type";
3
3
  import { IntegratedDevices } from "./integrated-devices";
4
4
  interface DeviceMeasurementMap {
@@ -12,7 +12,7 @@ interface DeviceMeasurementMap {
12
12
  [IntegratedDevices.ANDESFITTEMP]: never;
13
13
  [IntegratedDevices.FORATEMP]: never;
14
14
  [IntegratedDevices.COSINUSS]: never;
15
- [IntegratedDevices.BC01]: never;
15
+ [IntegratedDevices.BC01]: UrineAnalyzeMeasurement;
16
16
  [IntegratedDevices.FORA_SCALE]: never;
17
17
  [IntegratedDevices.RPM_SCALE]: never;
18
18
  [IntegratedDevices.CLEVERTEMP]: never;
@@ -1 +1 @@
1
- {"version":3,"file":"device-measurement-map.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/types/device-measurement-map.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,UAAU,oBAAoB;IAC5B,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC;IAC9C,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,wBAAwB,GAAG,cAAc,CAAC;IACnE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,wBAAwB,CAAC;IACnD,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IAClC,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,wBAAwB,CAAC;IACrD,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC;IAC1C,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACtC,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;IACxC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpC,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IAChC,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACtC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;IACrC,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACtC,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IAChC,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACjC,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;IAC9B,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;IACrC,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;CAChC;AAED,MAAM,MAAM,yBAAyB,CAAC,CAAC,SAAS,SAAS,iBAAiB,EAAE,IAC1E;KACG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG;QAAE,QAAQ,EAAE,QAAQ,CAAA;KAAE;CACnE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"device-measurement-map.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/types/device-measurement-map.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,UAAU,oBAAoB;IAC5B,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC;IAC9C,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,wBAAwB,GAAG,cAAc,CAAC;IACnE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,wBAAwB,CAAC;IACnD,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IAClC,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,wBAAwB,CAAC;IACrD,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC;IAC1C,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACtC,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;IACxC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpC,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC;IAClD,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACtC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;IACrC,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACtC,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IAChC,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACjC,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;IAC9B,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;IACrC,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;CAChC;AAED,MAAM,MAAM,yBAAyB,CAAC,CAAC,SAAS,SAAS,iBAAiB,EAAE,IAC1E;KACG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG;QAAE,QAAQ,EAAE,QAAQ,CAAA;KAAE;CACnE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ovok/native",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "React native component sdk for OVOK",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/commonjs/index.js",
@@ -69,7 +69,9 @@
69
69
  "@react-native-community/datetimepicker": "^9.1.0",
70
70
  "@react-native-community/netinfo": "^12.0.1",
71
71
  "@react-native-google-signin/google-signin": "^16.1.2",
72
+ "@react-native/babel-preset": "^0.85.0",
72
73
  "@react-native/eslint-config": "^0.73.1",
74
+ "@react-native/jest-preset": "^0.85.0",
73
75
  "@release-it/conventional-changelog": "^5.0.0",
74
76
  "@sentry/react-native": "~7.11.0",
75
77
  "@shopify/flash-list": "2.0.2",
@@ -125,6 +127,7 @@
125
127
  "react-native-render-html": "^6.3.4",
126
128
  "react-native-safe-area-context": "5.7.0",
127
129
  "react-native-svg": "15.15.4",
130
+ "react-native-worklets": "0.8.x",
128
131
  "react-test-renderer": "19.2.3",
129
132
  "release-it": "^19.0.6",
130
133
  "socket.io-client": "^4.8.3",