@ovok/native 1.16.1-dev.2089 → 1.16.1-dev.2091

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.
@@ -28,7 +28,7 @@ class BC01Device extends _btManagedDevice.BTManagedDevice {
28
28
  this.reportedTimestamps.clear();
29
29
  };
30
30
  reportedTimestamps = new Set();
31
- mainServices = _bc01MainServices.bc01MainServices;
31
+ mainServices = [_bc01MainServices.bc01MainServices[0]];
32
32
  frameReader = new _bc01FrameReader.Bc01FrameReader();
33
33
 
34
34
  /**
@@ -40,6 +40,7 @@ class BC01Device extends _btManagedDevice.BTManagedDevice {
40
40
  stuckDataTimeout = 90_000;
41
41
  constructor(device, params) {
42
42
  super(device, params);
43
+ this.mainServices = [(0, _bc01MainServices.selectBc01MainService)(device.serviceUUIDs)];
43
44
 
44
45
  /**
45
46
  * The BC401 answers one command with one frame and picks the next command
@@ -52,8 +53,8 @@ class BC01Device extends _btManagedDevice.BTManagedDevice {
52
53
  this.reportedTimestamps.clear();
53
54
  return new _bc01CommandSequencer.Bc01CommandSequencer({
54
55
  write: {
55
- serviceUuid: _bc01MainServices.bc01MainServices[0].uuid,
56
- characteristicUuid: _bc01MainServices.bc01MainServices[0].writeUuid.uuid
56
+ serviceUuid: this.mainServices[0].uuid,
57
+ characteristicUuid: this.mainServices[0].writeUuid.uuid
57
58
  },
58
59
  onError: reason => this.onError?.(new Error(`BC401: ${reason}`)),
59
60
  clockSync: params.clockSync,
@@ -1 +1 @@
1
- {"version":3,"names":["_core","require","_measurementFeedback","_caseType","_hexToByte","_btManagedDevice","_bc01CommandSequencer","_bc01FrameParser","_bc01FrameReader","_bc01MainServices","BC01Device","BTManagedDevice","onStreamStart","reportedTimestamps","clear","Set","mainServices","bc01MainServices","frameReader","Bc01FrameReader","stuckDataTimeout","constructor","device","params","createCommandSequencer","Bc01CommandSequencer","write","serviceUuid","uuid","characteristicUuid","writeUuid","onError","reason","Error","clockSync","clearDeviceHistory","now","validatePackage","pkg","length","opcode","hexToByte","minLength","bc01FrameLengths","toString","padStart","undefined","handleDependentResult","data","frame","reportUrsRecord","parsingCase","caseType","CaseType","OTHER","parsed","parseBc01Record","measuredValues","BC01_ANALYTE_ORDER","reduce","acc","analyte","value","values","Object","keys","MeasurementFeedbackKey","DISTURB_DETECTED","timestamp","getTime","has","add","reading","RESULT","measurementTypeKey","MeasurementTypeKey","uricAcid","urineValues","recordedAt","onResult","exports"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bc01/bc01.device.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_core","require","_measurementFeedback","_caseType","_hexToByte","_btManagedDevice","_bc01CommandSequencer","_bc01FrameParser","_bc01FrameReader","_bc01MainServices","BC01Device","BTManagedDevice","onStreamStart","reportedTimestamps","clear","Set","mainServices","bc01MainServices","frameReader","Bc01FrameReader","stuckDataTimeout","constructor","device","params","selectBc01MainService","serviceUUIDs","createCommandSequencer","Bc01CommandSequencer","write","serviceUuid","uuid","characteristicUuid","writeUuid","onError","reason","Error","clockSync","clearDeviceHistory","now","validatePackage","pkg","length","opcode","hexToByte","minLength","bc01FrameLengths","toString","padStart","undefined","handleDependentResult","data","frame","reportUrsRecord","parsingCase","caseType","CaseType","OTHER","parsed","parseBc01Record","measuredValues","BC01_ANALYTE_ORDER","reduce","acc","analyte","value","values","Object","keys","MeasurementFeedbackKey","DISTURB_DETECTED","timestamp","getTime","has","add","reading","RESULT","measurementTypeKey","MeasurementTypeKey","uricAcid","urineValues","recordedAt","onResult","exports"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bc01/bc01.device.ts"],"mappings":"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","ignoreList":[]}
@@ -3,20 +3,22 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.bc01MainServices = void 0;
6
+ exports.selectBc01MainService = exports.bc01MainServices = exports.BC01_UART_SERVICE_UUID = void 0;
7
7
  var _core = require("@ovok/core");
8
8
  var _caseType = require("../../../types/case-type.js");
9
9
  /**
10
- * Contec BC401 (a.k.a. BC01) urine analyzer — GATT profile.
10
+ * Contec BC401 (a.k.a. BC01) urine analyzer — supported GATT profiles.
11
11
  *
12
- * The BC401 uses Contec's proprietary FF12 service, shared across their
13
- * consumer medical devices. Every stored urine-strip measurement is pushed as a
14
- * 16-byte record on 0xFF02 after the host has walked the handshake documented
15
- * in `bc01-command-sequencer.ts`.
12
+ * PHMS supports both the proprietary FF12 profile and the Microchip/ISSC
13
+ * transparent-UART profile. The peripheral advertises its active profile; the
14
+ * device selects one profile and subscribes only to its characteristics.
16
15
  *
17
16
  * Service 0xFF12
18
17
  * Notify (result) 0xFF02 — CCCD 0x2902 must be written 01 00 to enable
19
18
  * Write (command) 0xFF01 — RESET / SET_TIME / GET_COUNT / GET_RECORDS
19
+ * Service 49535343-fe7d-4ae5-8fa9-9fafd205e455
20
+ * Notify (result) 49535343-1e4d-4bd9-ba61-23c647249616
21
+ * Write (command) 49535343-8841-43f4-a8d4-ecbe34729bb3
20
22
  *
21
23
  * On the wire a stored URS record opens with 0xE1 (single) or 0xE2 (paginated).
22
24
  * The remaining fifteen bytes carry the flags nibble, timestamp, seven bytes of
@@ -24,8 +26,10 @@ var _caseType = require("../../../types/case-type.js");
24
26
  * them; this file just declares the GATT surface and hands every E1/E2 frame
25
27
  * to the driver's dependent-result path so the parser can run.
26
28
  */
29
+ const BC01_FF12_SERVICE_UUID = "0000ff12-0000-1000-8000-00805f9b34fb";
30
+ const BC01_UART_SERVICE_UUID = exports.BC01_UART_SERVICE_UUID = "49535343-fe7d-4ae5-8fa9-9fafd205e455";
27
31
  const bc01MainServices = exports.bc01MainServices = [{
28
- uuid: "0000ff12-0000-1000-8000-00805f9b34fb",
32
+ uuid: BC01_FF12_SERVICE_UUID,
29
33
  /**
30
34
  * PHMS 3.0.03 writes `[0x80, 0x00]` to 0xFF01 the moment its GATT
31
35
  * subscription is up — decompiled at L1/f.java:694 ("发送复位命令" — "send
@@ -63,5 +67,49 @@ const bc01MainServices = exports.bc01MainServices = [{
63
67
  }]
64
68
  }
65
69
  }]
70
+ }, {
71
+ uuid: BC01_UART_SERVICE_UUID,
72
+ writeUuid: {
73
+ uuid: "49535343-8841-43f4-a8d4-ecbe34729bb3",
74
+ mainCommandUuid: "8000"
75
+ },
76
+ monitorUuids: [{
77
+ uuid: "49535343-1e4d-4bd9-ba61-23c647249616",
78
+ parsingModel: {
79
+ caseValuePosition: [0],
80
+ cases: [{
81
+ measurementTypeKey: _core.MeasurementTypeKey.uricAcid,
82
+ caseType: _caseType.CaseType.DEPENDENT,
83
+ caseValue: "e1",
84
+ parseDefinitions: []
85
+ }, {
86
+ measurementTypeKey: _core.MeasurementTypeKey.uricAcid,
87
+ caseType: _caseType.CaseType.DEPENDENT,
88
+ caseValue: "e2",
89
+ parseDefinitions: []
90
+ }]
91
+ }
92
+ }]
66
93
  }];
94
+ const normalizeAdvertisedUuid = uuid => {
95
+ const normalized = uuid.trim().toLowerCase();
96
+ if (/^[0-9a-f]{4}$/.test(normalized)) {
97
+ return `0000${normalized}-0000-1000-8000-00805f9b34fb`;
98
+ }
99
+ if (/^[0-9a-f]{8}$/.test(normalized)) {
100
+ return `${normalized}-0000-1000-8000-00805f9b34fb`;
101
+ }
102
+ return normalized;
103
+ };
104
+
105
+ /**
106
+ * Select the advertised profile, preferring the existing FF12 protocol when
107
+ * a peripheral advertises both. Devices without an advertisement keep the
108
+ * established FF12 behavior.
109
+ */
110
+ const selectBc01MainService = advertisedServiceUuids => {
111
+ const advertised = new Set((advertisedServiceUuids ?? []).map(normalizeAdvertisedUuid));
112
+ return bc01MainServices.find(service => advertised.has(service.uuid)) ?? bc01MainServices[0];
113
+ };
114
+ exports.selectBc01MainService = selectBc01MainService;
67
115
  //# sourceMappingURL=bc01.main-services.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_core","require","_caseType","bc01MainServices","exports","uuid","writeUuid","mainCommandUuid","monitorUuids","parsingModel","caseValuePosition","cases","measurementTypeKey","MeasurementTypeKey","uricAcid","caseType","CaseType","DEPENDENT","caseValue","parseDefinitions"],"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;AACO,MAAME,gBAA4B,GAAAC,OAAA,CAAAD,gBAAA,GAAG,CAC1C;EACEE,IAAI,EAAE,sCAAsC;EAE5C;AACJ;AACA;AACA;AACA;AACA;AACA;EACIC,SAAS,EAAE;IACTD,IAAI,EAAE,sCAAsC;IAC5CE,eAAe,EAAE;EACnB,CAAC;EACDC,YAAY,EAAE,CACZ;IACEH,IAAI,EAAE,sCAAsC;IAE5C;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQI,YAAY,EAAE;MACZC,iBAAiB,EAAE,CAAC,CAAC,CAAC;MACtBC,KAAK,EAAE,CACL;QACEC,kBAAkB,EAAEC,wBAAkB,CAACC,QAAQ;QAC/CC,QAAQ,EAAEC,kBAAQ,CAACC,SAAS;QAC5BC,SAAS,EAAE,IAAI;QACfC,gBAAgB,EAAE;MACpB,CAAC,EACD;QACEP,kBAAkB,EAAEC,wBAAkB,CAACC,QAAQ;QAC/CC,QAAQ,EAAEC,kBAAQ,CAACC,SAAS;QAC5BC,SAAS,EAAE,IAAI;QACfC,gBAAgB,EAAE;MACpB,CAAC;IAEL;EACF,CAAC;AAEL,CAAC,CACF","ignoreList":[]}
1
+ {"version":3,"names":["_core","require","_caseType","BC01_FF12_SERVICE_UUID","BC01_UART_SERVICE_UUID","exports","bc01MainServices","uuid","writeUuid","mainCommandUuid","monitorUuids","parsingModel","caseValuePosition","cases","measurementTypeKey","MeasurementTypeKey","uricAcid","caseType","CaseType","DEPENDENT","caseValue","parseDefinitions","normalizeAdvertisedUuid","normalized","trim","toLowerCase","test","selectBc01MainService","advertisedServiceUuids","advertised","Set","map","find","service","has"],"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,MAAME,sBAAsB,GAC1B,sCAAsC;AAExC,MAAMC,sBAAsB,GAAAC,OAAA,CAAAD,sBAAA,GAC1B,sCAAsC;AAExC,MAAME,gBAA4B,GAAAD,OAAA,CAAAC,gBAAA,GAAG,CACnC;EACEC,IAAI,EAAEJ,sBAAsB;EAE5B;AACJ;AACA;AACA;AACA;AACA;AACA;EACIK,SAAS,EAAE;IACTD,IAAI,EAAE,sCAAsC;IAC5CE,eAAe,EAAE;EACnB,CAAC;EACDC,YAAY,EAAE,CACZ;IACEH,IAAI,EAAE,sCAAsC;IAE5C;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQI,YAAY,EAAE;MACZC,iBAAiB,EAAE,CAAC,CAAC,CAAC;MACtBC,KAAK,EAAE,CACL;QACEC,kBAAkB,EAAEC,wBAAkB,CAACC,QAAQ;QAC/CC,QAAQ,EAAEC,kBAAQ,CAACC,SAAS;QAC5BC,SAAS,EAAE,IAAI;QACfC,gBAAgB,EAAE;MACpB,CAAC,EACD;QACEP,kBAAkB,EAAEC,wBAAkB,CAACC,QAAQ;QAC/CC,QAAQ,EAAEC,kBAAQ,CAACC,SAAS;QAC5BC,SAAS,EAAE,IAAI;QACfC,gBAAgB,EAAE;MACpB,CAAC;IAEL;EACF,CAAC;AAEL,CAAC,EACD;EACEd,IAAI,EAAEH,sBAAsB;EAC5BI,SAAS,EAAE;IACTD,IAAI,EAAE,sCAAsC;IAC5CE,eAAe,EAAE;EACnB,CAAC;EACDC,YAAY,EAAE,CACZ;IACEH,IAAI,EAAE,sCAAsC;IAC5CI,YAAY,EAAE;MACZC,iBAAiB,EAAE,CAAC,CAAC,CAAC;MACtBC,KAAK,EAAE,CACL;QACEC,kBAAkB,EAAEC,wBAAkB,CAACC,QAAQ;QAC/CC,QAAQ,EAAEC,kBAAQ,CAACC,SAAS;QAC5BC,SAAS,EAAE,IAAI;QACfC,gBAAgB,EAAE;MACpB,CAAC,EACD;QACEP,kBAAkB,EAAEC,wBAAkB,CAACC,QAAQ;QAC/CC,QAAQ,EAAEC,kBAAQ,CAACC,SAAS;QAC5BC,SAAS,EAAE,IAAI;QACfC,gBAAgB,EAAE;MACpB,CAAC;IAEL;EACF,CAAC;AAEL,CAAC,CACF;AAED,MAAMC,uBAAuB,GAAIf,IAAY,IAAa;EACxD,MAAMgB,UAAU,GAAGhB,IAAI,CAACiB,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;EAE5C,IAAI,eAAe,CAACC,IAAI,CAACH,UAAU,CAAC,EAAE;IACpC,OAAO,OAAOA,UAAU,8BAA8B;EACxD;EAEA,IAAI,eAAe,CAACG,IAAI,CAACH,UAAU,CAAC,EAAE;IACpC,OAAO,GAAGA,UAAU,8BAA8B;EACpD;EAEA,OAAOA,UAAU;AACnB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,MAAMI,qBAAqB,GACzBC,sBAA4D,IAC/C;EACb,MAAMC,UAAU,GAAG,IAAIC,GAAG,CACxB,CAACF,sBAAsB,IAAI,EAAE,EAAEG,GAAG,CAACT,uBAAuB,CAC5D,CAAC;EAED,OACEhB,gBAAgB,CAAC0B,IAAI,CAAEC,OAAO,IAAKJ,UAAU,CAACK,GAAG,CAACD,OAAO,CAAC1B,IAAI,CAAC,CAAC,IAChED,gBAAgB,CAAC,CAAC,CAAE;AAExB,CAAC;AAACD,OAAA,CAAAsB,qBAAA,GAAAA,qBAAA","ignoreList":[]}
@@ -8,7 +8,7 @@ import { BTManagedDevice } from "../bt-managed-device.js";
8
8
  import { Bc01CommandSequencer } from "./bc01-command-sequencer.js";
9
9
  import { BC01_ANALYTE_ORDER, parseBc01Record } from "./bc01-frame-parser.js";
10
10
  import { Bc01FrameReader, bc01FrameLengths } from "./bc01.frame-reader.js";
11
- import { bc01MainServices } from "./bc01.main-services.js";
11
+ import { bc01MainServices, selectBc01MainService } from "./bc01.main-services.js";
12
12
 
13
13
  /**
14
14
  * Contec BC401 (BC01) urine analyzer driver.
@@ -25,7 +25,7 @@ export class BC01Device extends BTManagedDevice {
25
25
  this.reportedTimestamps.clear();
26
26
  };
27
27
  reportedTimestamps = new Set();
28
- mainServices = bc01MainServices;
28
+ mainServices = [bc01MainServices[0]];
29
29
  frameReader = new Bc01FrameReader();
30
30
 
31
31
  /**
@@ -37,6 +37,7 @@ export class BC01Device extends BTManagedDevice {
37
37
  stuckDataTimeout = 90_000;
38
38
  constructor(device, params) {
39
39
  super(device, params);
40
+ this.mainServices = [selectBc01MainService(device.serviceUUIDs)];
40
41
 
41
42
  /**
42
43
  * The BC401 answers one command with one frame and picks the next command
@@ -49,8 +50,8 @@ export class BC01Device extends BTManagedDevice {
49
50
  this.reportedTimestamps.clear();
50
51
  return new Bc01CommandSequencer({
51
52
  write: {
52
- serviceUuid: bc01MainServices[0].uuid,
53
- characteristicUuid: bc01MainServices[0].writeUuid.uuid
53
+ serviceUuid: this.mainServices[0].uuid,
54
+ characteristicUuid: this.mainServices[0].writeUuid.uuid
54
55
  },
55
56
  onError: reason => this.onError?.(new Error(`BC401: ${reason}`)),
56
57
  clockSync: params.clockSync,
@@ -1 +1 @@
1
- {"version":3,"names":["MeasurementTypeKey","MeasurementFeedbackKey","CaseType","hexToByte","BTManagedDevice","Bc01CommandSequencer","BC01_ANALYTE_ORDER","parseBc01Record","Bc01FrameReader","bc01FrameLengths","bc01MainServices","BC01Device","onStreamStart","reportedTimestamps","clear","Set","mainServices","frameReader","stuckDataTimeout","constructor","device","params","createCommandSequencer","write","serviceUuid","uuid","characteristicUuid","writeUuid","onError","reason","Error","clockSync","clearDeviceHistory","now","validatePackage","pkg","length","opcode","minLength","toString","padStart","undefined","handleDependentResult","data","frame","reportUrsRecord","parsingCase","caseType","OTHER","parsed","measuredValues","reduce","acc","analyte","value","values","Object","keys","DISTURB_DETECTED","timestamp","getTime","has","add","reading","RESULT","measurementTypeKey","uricAcid","urineValues","recordedAt","onResult"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bc01/bc01.device.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["MeasurementTypeKey","MeasurementFeedbackKey","CaseType","hexToByte","BTManagedDevice","Bc01CommandSequencer","BC01_ANALYTE_ORDER","parseBc01Record","Bc01FrameReader","bc01FrameLengths","bc01MainServices","selectBc01MainService","BC01Device","onStreamStart","reportedTimestamps","clear","Set","mainServices","frameReader","stuckDataTimeout","constructor","device","params","serviceUUIDs","createCommandSequencer","write","serviceUuid","uuid","characteristicUuid","writeUuid","onError","reason","Error","clockSync","clearDeviceHistory","now","validatePackage","pkg","length","opcode","minLength","toString","padStart","undefined","handleDependentResult","data","frame","reportUrsRecord","parsingCase","caseType","OTHER","parsed","measuredValues","reduce","acc","analyte","value","values","Object","keys","DISTURB_DETECTED","timestamp","getTime","has","add","reading","RESULT","measurementTypeKey","uricAcid","urineValues","recordedAt","onResult"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bc01/bc01.device.ts"],"mappings":"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","ignoreList":[]}
@@ -3,16 +3,18 @@
3
3
  import { MeasurementTypeKey } from "@ovok/core";
4
4
  import { CaseType } from "../../../types/case-type.js";
5
5
  /**
6
- * Contec BC401 (a.k.a. BC01) urine analyzer — GATT profile.
6
+ * Contec BC401 (a.k.a. BC01) urine analyzer — supported GATT profiles.
7
7
  *
8
- * The BC401 uses Contec's proprietary FF12 service, shared across their
9
- * consumer medical devices. Every stored urine-strip measurement is pushed as a
10
- * 16-byte record on 0xFF02 after the host has walked the handshake documented
11
- * in `bc01-command-sequencer.ts`.
8
+ * PHMS supports both the proprietary FF12 profile and the Microchip/ISSC
9
+ * transparent-UART profile. The peripheral advertises its active profile; the
10
+ * device selects one profile and subscribes only to its characteristics.
12
11
  *
13
12
  * Service 0xFF12
14
13
  * Notify (result) 0xFF02 — CCCD 0x2902 must be written 01 00 to enable
15
14
  * Write (command) 0xFF01 — RESET / SET_TIME / GET_COUNT / GET_RECORDS
15
+ * Service 49535343-fe7d-4ae5-8fa9-9fafd205e455
16
+ * Notify (result) 49535343-1e4d-4bd9-ba61-23c647249616
17
+ * Write (command) 49535343-8841-43f4-a8d4-ecbe34729bb3
16
18
  *
17
19
  * On the wire a stored URS record opens with 0xE1 (single) or 0xE2 (paginated).
18
20
  * The remaining fifteen bytes carry the flags nibble, timestamp, seven bytes of
@@ -20,8 +22,10 @@ import { CaseType } from "../../../types/case-type.js";
20
22
  * them; this file just declares the GATT surface and hands every E1/E2 frame
21
23
  * to the driver's dependent-result path so the parser can run.
22
24
  */
23
- export const bc01MainServices = [{
24
- uuid: "0000ff12-0000-1000-8000-00805f9b34fb",
25
+ const BC01_FF12_SERVICE_UUID = "0000ff12-0000-1000-8000-00805f9b34fb";
26
+ const BC01_UART_SERVICE_UUID = "49535343-fe7d-4ae5-8fa9-9fafd205e455";
27
+ const bc01MainServices = [{
28
+ uuid: BC01_FF12_SERVICE_UUID,
25
29
  /**
26
30
  * PHMS 3.0.03 writes `[0x80, 0x00]` to 0xFF01 the moment its GATT
27
31
  * subscription is up — decompiled at L1/f.java:694 ("发送复位命令" — "send
@@ -59,5 +63,49 @@ export const bc01MainServices = [{
59
63
  }]
60
64
  }
61
65
  }]
66
+ }, {
67
+ uuid: BC01_UART_SERVICE_UUID,
68
+ writeUuid: {
69
+ uuid: "49535343-8841-43f4-a8d4-ecbe34729bb3",
70
+ mainCommandUuid: "8000"
71
+ },
72
+ monitorUuids: [{
73
+ uuid: "49535343-1e4d-4bd9-ba61-23c647249616",
74
+ parsingModel: {
75
+ caseValuePosition: [0],
76
+ cases: [{
77
+ measurementTypeKey: MeasurementTypeKey.uricAcid,
78
+ caseType: CaseType.DEPENDENT,
79
+ caseValue: "e1",
80
+ parseDefinitions: []
81
+ }, {
82
+ measurementTypeKey: MeasurementTypeKey.uricAcid,
83
+ caseType: CaseType.DEPENDENT,
84
+ caseValue: "e2",
85
+ parseDefinitions: []
86
+ }]
87
+ }
88
+ }]
62
89
  }];
90
+ const normalizeAdvertisedUuid = uuid => {
91
+ const normalized = uuid.trim().toLowerCase();
92
+ if (/^[0-9a-f]{4}$/.test(normalized)) {
93
+ return `0000${normalized}-0000-1000-8000-00805f9b34fb`;
94
+ }
95
+ if (/^[0-9a-f]{8}$/.test(normalized)) {
96
+ return `${normalized}-0000-1000-8000-00805f9b34fb`;
97
+ }
98
+ return normalized;
99
+ };
100
+
101
+ /**
102
+ * Select the advertised profile, preferring the existing FF12 protocol when
103
+ * a peripheral advertises both. Devices without an advertisement keep the
104
+ * established FF12 behavior.
105
+ */
106
+ const selectBc01MainService = advertisedServiceUuids => {
107
+ const advertised = new Set((advertisedServiceUuids ?? []).map(normalizeAdvertisedUuid));
108
+ return bc01MainServices.find(service => advertised.has(service.uuid)) ?? bc01MainServices[0];
109
+ };
110
+ export { BC01_UART_SERVICE_UUID, bc01MainServices, selectBc01MainService };
63
111
  //# sourceMappingURL=bc01.main-services.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MeasurementTypeKey","CaseType","bc01MainServices","uuid","writeUuid","mainCommandUuid","monitorUuids","parsingModel","caseValuePosition","cases","measurementTypeKey","uricAcid","caseType","DEPENDENT","caseValue","parseDefinitions"],"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,OAAO,MAAMC,gBAA4B,GAAG,CAC1C;EACEC,IAAI,EAAE,sCAAsC;EAE5C;AACJ;AACA;AACA;AACA;AACA;AACA;EACIC,SAAS,EAAE;IACTD,IAAI,EAAE,sCAAsC;IAC5CE,eAAe,EAAE;EACnB,CAAC;EACDC,YAAY,EAAE,CACZ;IACEH,IAAI,EAAE,sCAAsC;IAE5C;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQI,YAAY,EAAE;MACZC,iBAAiB,EAAE,CAAC,CAAC,CAAC;MACtBC,KAAK,EAAE,CACL;QACEC,kBAAkB,EAAEV,kBAAkB,CAACW,QAAQ;QAC/CC,QAAQ,EAAEX,QAAQ,CAACY,SAAS;QAC5BC,SAAS,EAAE,IAAI;QACfC,gBAAgB,EAAE;MACpB,CAAC,EACD;QACEL,kBAAkB,EAAEV,kBAAkB,CAACW,QAAQ;QAC/CC,QAAQ,EAAEX,QAAQ,CAACY,SAAS;QAC5BC,SAAS,EAAE,IAAI;QACfC,gBAAgB,EAAE;MACpB,CAAC;IAEL;EACF,CAAC;AAEL,CAAC,CACF","ignoreList":[]}
1
+ {"version":3,"names":["MeasurementTypeKey","CaseType","BC01_FF12_SERVICE_UUID","BC01_UART_SERVICE_UUID","bc01MainServices","uuid","writeUuid","mainCommandUuid","monitorUuids","parsingModel","caseValuePosition","cases","measurementTypeKey","uricAcid","caseType","DEPENDENT","caseValue","parseDefinitions","normalizeAdvertisedUuid","normalized","trim","toLowerCase","test","selectBc01MainService","advertisedServiceUuids","advertised","Set","map","find","service","has"],"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,MAAMC,sBAAsB,GAC1B,sCAAsC;AAExC,MAAMC,sBAAsB,GAC1B,sCAAsC;AAExC,MAAMC,gBAA4B,GAAG,CACnC;EACEC,IAAI,EAAEH,sBAAsB;EAE5B;AACJ;AACA;AACA;AACA;AACA;AACA;EACII,SAAS,EAAE;IACTD,IAAI,EAAE,sCAAsC;IAC5CE,eAAe,EAAE;EACnB,CAAC;EACDC,YAAY,EAAE,CACZ;IACEH,IAAI,EAAE,sCAAsC;IAE5C;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQI,YAAY,EAAE;MACZC,iBAAiB,EAAE,CAAC,CAAC,CAAC;MACtBC,KAAK,EAAE,CACL;QACEC,kBAAkB,EAAEZ,kBAAkB,CAACa,QAAQ;QAC/CC,QAAQ,EAAEb,QAAQ,CAACc,SAAS;QAC5BC,SAAS,EAAE,IAAI;QACfC,gBAAgB,EAAE;MACpB,CAAC,EACD;QACEL,kBAAkB,EAAEZ,kBAAkB,CAACa,QAAQ;QAC/CC,QAAQ,EAAEb,QAAQ,CAACc,SAAS;QAC5BC,SAAS,EAAE,IAAI;QACfC,gBAAgB,EAAE;MACpB,CAAC;IAEL;EACF,CAAC;AAEL,CAAC,EACD;EACEZ,IAAI,EAAEF,sBAAsB;EAC5BG,SAAS,EAAE;IACTD,IAAI,EAAE,sCAAsC;IAC5CE,eAAe,EAAE;EACnB,CAAC;EACDC,YAAY,EAAE,CACZ;IACEH,IAAI,EAAE,sCAAsC;IAC5CI,YAAY,EAAE;MACZC,iBAAiB,EAAE,CAAC,CAAC,CAAC;MACtBC,KAAK,EAAE,CACL;QACEC,kBAAkB,EAAEZ,kBAAkB,CAACa,QAAQ;QAC/CC,QAAQ,EAAEb,QAAQ,CAACc,SAAS;QAC5BC,SAAS,EAAE,IAAI;QACfC,gBAAgB,EAAE;MACpB,CAAC,EACD;QACEL,kBAAkB,EAAEZ,kBAAkB,CAACa,QAAQ;QAC/CC,QAAQ,EAAEb,QAAQ,CAACc,SAAS;QAC5BC,SAAS,EAAE,IAAI;QACfC,gBAAgB,EAAE;MACpB,CAAC;IAEL;EACF,CAAC;AAEL,CAAC,CACF;AAED,MAAMC,uBAAuB,GAAIb,IAAY,IAAa;EACxD,MAAMc,UAAU,GAAGd,IAAI,CAACe,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;EAE5C,IAAI,eAAe,CAACC,IAAI,CAACH,UAAU,CAAC,EAAE;IACpC,OAAO,OAAOA,UAAU,8BAA8B;EACxD;EAEA,IAAI,eAAe,CAACG,IAAI,CAACH,UAAU,CAAC,EAAE;IACpC,OAAO,GAAGA,UAAU,8BAA8B;EACpD;EAEA,OAAOA,UAAU;AACnB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,MAAMI,qBAAqB,GACzBC,sBAA4D,IAC/C;EACb,MAAMC,UAAU,GAAG,IAAIC,GAAG,CACxB,CAACF,sBAAsB,IAAI,EAAE,EAAEG,GAAG,CAACT,uBAAuB,CAC5D,CAAC;EAED,OACEd,gBAAgB,CAACwB,IAAI,CAAEC,OAAO,IAAKJ,UAAU,CAACK,GAAG,CAACD,OAAO,CAACxB,IAAI,CAAC,CAAC,IAChED,gBAAgB,CAAC,CAAC,CAAE;AAExB,CAAC;AAED,SACED,sBAAsB,EACtBC,gBAAgB,EAChBmB,qBAAqB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"bc01.device.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/bc01/bc01.device.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAK9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAC;AAC9F,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,OAAO,EAAE,eAAe,EAAoB,MAAM,qBAAqB,CAAC;AAGxE;;;;;;;;;GASG;AACH,qBAAa,UAAW,SAAQ,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC;IACrE,SAAS,CAAC,aAAa,EAAE,MAAM,IAAI,CAEjC;IAEF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IAExD,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAoB;IACtD,SAAS,CAAC,WAAW,EAAE,eAAe,CAAyB;IAE/D;;;;;OAKG;IACH,SAAS,CAAC,gBAAgB,SAAU;gBAExB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC;IA4B9E;;;;;OAKG;IACH,SAAS,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,OAAO,CAanD;IAEF;;;;;;;OAOG;IACH,SAAS,CAAC,qBAAqB,GAC7B,MAAM,4BAA4B,CAChC,yBAAyB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACpD,KACA,4BAA4B,CAC7B,yBAAyB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACpD,CASC;IAEF;;;;;;OAMG;IAEH,OAAO,CAAC,eAAe;CA6CxB"}
1
+ {"version":3,"file":"bc01.device.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/bc01/bc01.device.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAK9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAC;AAC9F,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,OAAO,EAAE,eAAe,EAAoB,MAAM,qBAAqB,CAAC;AAMxE;;;;;;;;;GASG;AACH,qBAAa,UAAW,SAAQ,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC;IACrE,SAAS,CAAC,aAAa,EAAE,MAAM,IAAI,CAEjC;IAEF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IAExD,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,CAA0B;IAC5D,SAAS,CAAC,WAAW,EAAE,eAAe,CAAyB;IAE/D;;;;;OAKG;IACH,SAAS,CAAC,gBAAgB,SAAU;gBAExB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC;IA6B9E;;;;;OAKG;IACH,SAAS,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,OAAO,CAanD;IAEF;;;;;;;OAOG;IACH,SAAS,CAAC,qBAAqB,GAC7B,MAAM,4BAA4B,CAChC,yBAAyB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACpD,KACA,4BAA4B,CAC7B,yBAAyB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACpD,CASC;IAEF;;;;;;OAMG;IAEH,OAAO,CAAC,eAAe;CA6CxB"}
@@ -1,21 +1,11 @@
1
1
  import { IService } from "../../../types/service.type";
2
+ declare const BC01_UART_SERVICE_UUID = "49535343-fe7d-4ae5-8fa9-9fafd205e455";
3
+ declare const bc01MainServices: IService[];
2
4
  /**
3
- * Contec BC401 (a.k.a. BC01) urine analyzer — GATT profile.
4
- *
5
- * The BC401 uses Contec's proprietary FF12 service, shared across their
6
- * consumer medical devices. Every stored urine-strip measurement is pushed as a
7
- * 16-byte record on 0xFF02 after the host has walked the handshake documented
8
- * in `bc01-command-sequencer.ts`.
9
- *
10
- * Service 0xFF12
11
- * Notify (result) 0xFF02 — CCCD 0x2902 must be written 01 00 to enable
12
- * Write (command) 0xFF01 — RESET / SET_TIME / GET_COUNT / GET_RECORDS
13
- *
14
- * On the wire a stored URS record opens with 0xE1 (single) or 0xE2 (paginated).
15
- * The remaining fifteen bytes carry the flags nibble, timestamp, seven bytes of
16
- * packed 3-bit analyte indices, and a checksum. `bc01-frame-parser.ts` decodes
17
- * them; this file just declares the GATT surface and hands every E1/E2 frame
18
- * to the driver's dependent-result path so the parser can run.
5
+ * Select the advertised profile, preferring the existing FF12 protocol when
6
+ * a peripheral advertises both. Devices without an advertisement keep the
7
+ * established FF12 behavior.
19
8
  */
20
- export declare const bc01MainServices: IService[];
9
+ declare const selectBc01MainService: (advertisedServiceUuids: readonly string[] | null | undefined) => IService;
10
+ export { BC01_UART_SERVICE_UUID, bc01MainServices, selectBc01MainService, };
21
11
  //# sourceMappingURL=bc01.main-services.d.ts.map
@@ -1 +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;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,EAgDtC,CAAC"}
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;AAyBvD,QAAA,MAAM,sBAAsB,yCACY,CAAC;AAEzC,QAAA,MAAM,gBAAgB,EAAE,QAAQ,EA6E/B,CAAC;AAgBF;;;;GAIG;AACH,QAAA,MAAM,qBAAqB,GACzB,wBAAwB,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,KAC3D,QASF,CAAC;AAEF,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,GACtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bc01.device.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/bc01/bc01.device.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAK9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAC;AAC9F,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,OAAO,EAAE,eAAe,EAAoB,MAAM,qBAAqB,CAAC;AAGxE;;;;;;;;;GASG;AACH,qBAAa,UAAW,SAAQ,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC;IACrE,SAAS,CAAC,aAAa,EAAE,MAAM,IAAI,CAEjC;IAEF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IAExD,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAoB;IACtD,SAAS,CAAC,WAAW,EAAE,eAAe,CAAyB;IAE/D;;;;;OAKG;IACH,SAAS,CAAC,gBAAgB,SAAU;gBAExB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC;IA4B9E;;;;;OAKG;IACH,SAAS,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,OAAO,CAanD;IAEF;;;;;;;OAOG;IACH,SAAS,CAAC,qBAAqB,GAC7B,MAAM,4BAA4B,CAChC,yBAAyB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACpD,KACA,4BAA4B,CAC7B,yBAAyB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACpD,CASC;IAEF;;;;;;OAMG;IAEH,OAAO,CAAC,eAAe;CA6CxB"}
1
+ {"version":3,"file":"bc01.device.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/bc01/bc01.device.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAK9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAC;AAC9F,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,OAAO,EAAE,eAAe,EAAoB,MAAM,qBAAqB,CAAC;AAMxE;;;;;;;;;GASG;AACH,qBAAa,UAAW,SAAQ,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC;IACrE,SAAS,CAAC,aAAa,EAAE,MAAM,IAAI,CAEjC;IAEF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IAExD,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,CAA0B;IAC5D,SAAS,CAAC,WAAW,EAAE,eAAe,CAAyB;IAE/D;;;;;OAKG;IACH,SAAS,CAAC,gBAAgB,SAAU;gBAExB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC;IA6B9E;;;;;OAKG;IACH,SAAS,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,OAAO,CAanD;IAEF;;;;;;;OAOG;IACH,SAAS,CAAC,qBAAqB,GAC7B,MAAM,4BAA4B,CAChC,yBAAyB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACpD,KACA,4BAA4B,CAC7B,yBAAyB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACpD,CASC;IAEF;;;;;;OAMG;IAEH,OAAO,CAAC,eAAe;CA6CxB"}
@@ -1,21 +1,11 @@
1
1
  import { IService } from "../../../types/service.type";
2
+ declare const BC01_UART_SERVICE_UUID = "49535343-fe7d-4ae5-8fa9-9fafd205e455";
3
+ declare const bc01MainServices: IService[];
2
4
  /**
3
- * Contec BC401 (a.k.a. BC01) urine analyzer — GATT profile.
4
- *
5
- * The BC401 uses Contec's proprietary FF12 service, shared across their
6
- * consumer medical devices. Every stored urine-strip measurement is pushed as a
7
- * 16-byte record on 0xFF02 after the host has walked the handshake documented
8
- * in `bc01-command-sequencer.ts`.
9
- *
10
- * Service 0xFF12
11
- * Notify (result) 0xFF02 — CCCD 0x2902 must be written 01 00 to enable
12
- * Write (command) 0xFF01 — RESET / SET_TIME / GET_COUNT / GET_RECORDS
13
- *
14
- * On the wire a stored URS record opens with 0xE1 (single) or 0xE2 (paginated).
15
- * The remaining fifteen bytes carry the flags nibble, timestamp, seven bytes of
16
- * packed 3-bit analyte indices, and a checksum. `bc01-frame-parser.ts` decodes
17
- * them; this file just declares the GATT surface and hands every E1/E2 frame
18
- * to the driver's dependent-result path so the parser can run.
5
+ * Select the advertised profile, preferring the existing FF12 protocol when
6
+ * a peripheral advertises both. Devices without an advertisement keep the
7
+ * established FF12 behavior.
19
8
  */
20
- export declare const bc01MainServices: IService[];
9
+ declare const selectBc01MainService: (advertisedServiceUuids: readonly string[] | null | undefined) => IService;
10
+ export { BC01_UART_SERVICE_UUID, bc01MainServices, selectBc01MainService, };
21
11
  //# sourceMappingURL=bc01.main-services.d.ts.map
@@ -1 +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;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,EAgDtC,CAAC"}
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;AAyBvD,QAAA,MAAM,sBAAsB,yCACY,CAAC;AAEzC,QAAA,MAAM,gBAAgB,EAAE,QAAQ,EA6E/B,CAAC;AAgBF;;;;GAIG;AACH,QAAA,MAAM,qBAAqB,GACzB,wBAAwB,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,KAC3D,QASF,CAAC;AAEF,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,GACtB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ovok/native",
3
- "version": "1.16.1-dev.2089+485aa0b",
3
+ "version": "1.16.1-dev.2091+a6bf180",
4
4
  "description": "React native component sdk for OVOK",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/commonjs/index.js",