@ovok/native 0.4.10 → 1.0.0

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 (48) hide show
  1. package/LICENSE +667 -8
  2. package/lib/commonjs/modules/bt-management/services/bt-manager.js +13 -15
  3. package/lib/commonjs/modules/bt-management/services/bt-manager.js.map +1 -1
  4. package/lib/commonjs/modules/bt-management/services/device-creator.js +1 -7
  5. package/lib/commonjs/modules/bt-management/services/device-creator.js.map +1 -1
  6. package/lib/commonjs/modules/bt-management/services/devices/bc01/bc01.device.js +51 -113
  7. package/lib/commonjs/modules/bt-management/services/devices/bc01/bc01.device.js.map +1 -1
  8. package/lib/commonjs/modules/bt-management/services/devices/bc01/bc01.main-services.js +77 -41
  9. package/lib/commonjs/modules/bt-management/services/devices/bc01/bc01.main-services.js.map +1 -1
  10. package/lib/module/modules/bt-management/services/bt-manager.js +13 -15
  11. package/lib/module/modules/bt-management/services/bt-manager.js.map +1 -1
  12. package/lib/module/modules/bt-management/services/device-creator.js +1 -7
  13. package/lib/module/modules/bt-management/services/device-creator.js.map +1 -1
  14. package/lib/module/modules/bt-management/services/devices/bc01/bc01.device.js +51 -113
  15. package/lib/module/modules/bt-management/services/devices/bc01/bc01.device.js.map +1 -1
  16. package/lib/module/modules/bt-management/services/devices/bc01/bc01.main-services.js +77 -41
  17. package/lib/module/modules/bt-management/services/devices/bc01/bc01.main-services.js.map +1 -1
  18. package/lib/typescript/commonjs/src/modules/bt-management/services/bt-manager.d.ts +1 -0
  19. package/lib/typescript/commonjs/src/modules/bt-management/services/bt-manager.d.ts.map +1 -1
  20. package/lib/typescript/commonjs/src/modules/bt-management/services/device-creator.d.ts.map +1 -1
  21. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bc01/bc01.device.d.ts +13 -33
  22. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bc01/bc01.device.d.ts.map +1 -1
  23. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bc01/bc01.main-services.d.ts +17 -11
  24. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bc01/bc01.main-services.d.ts.map +1 -1
  25. package/lib/typescript/module/src/modules/bt-management/services/bt-manager.d.ts +1 -0
  26. package/lib/typescript/module/src/modules/bt-management/services/bt-manager.d.ts.map +1 -1
  27. package/lib/typescript/module/src/modules/bt-management/services/device-creator.d.ts.map +1 -1
  28. package/lib/typescript/module/src/modules/bt-management/services/devices/bc01/bc01.device.d.ts +13 -33
  29. package/lib/typescript/module/src/modules/bt-management/services/devices/bc01/bc01.device.d.ts.map +1 -1
  30. package/lib/typescript/module/src/modules/bt-management/services/devices/bc01/bc01.main-services.d.ts +17 -11
  31. package/lib/typescript/module/src/modules/bt-management/services/devices/bc01/bc01.main-services.d.ts.map +1 -1
  32. package/package.json +13 -12
  33. package/lib/commonjs/modules/bt-management/services/devices/bc01/bc01-command-sequencer.js +0 -184
  34. package/lib/commonjs/modules/bt-management/services/devices/bc01/bc01-command-sequencer.js.map +0 -1
  35. package/lib/commonjs/modules/bt-management/services/devices/bc01/bc01-frame-parser.js +0 -114
  36. package/lib/commonjs/modules/bt-management/services/devices/bc01/bc01-frame-parser.js.map +0 -1
  37. package/lib/module/modules/bt-management/services/devices/bc01/bc01-command-sequencer.js +0 -180
  38. package/lib/module/modules/bt-management/services/devices/bc01/bc01-command-sequencer.js.map +0 -1
  39. package/lib/module/modules/bt-management/services/devices/bc01/bc01-frame-parser.js +0 -110
  40. package/lib/module/modules/bt-management/services/devices/bc01/bc01-frame-parser.js.map +0 -1
  41. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bc01/bc01-command-sequencer.d.ts +0 -53
  42. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bc01/bc01-command-sequencer.d.ts.map +0 -1
  43. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bc01/bc01-frame-parser.d.ts +0 -53
  44. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bc01/bc01-frame-parser.d.ts.map +0 -1
  45. package/lib/typescript/module/src/modules/bt-management/services/devices/bc01/bc01-command-sequencer.d.ts +0 -53
  46. package/lib/typescript/module/src/modules/bt-management/services/devices/bc01/bc01-command-sequencer.d.ts.map +0 -1
  47. package/lib/typescript/module/src/modules/bt-management/services/devices/bc01/bc01-frame-parser.d.ts +0 -53
  48. package/lib/typescript/module/src/modules/bt-management/services/devices/bc01/bc01-frame-parser.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["Linking","Platform","ScanMode","State","slog","sentryLogger","DeviceCreator","BTManager","MAX_DEVICES","devices","Map","eventSubscriptions","constructor","bleManager","acceptedDevices","deviceCreator","destroy","stopScan","stateChangeListener","remove","undefined","onErrorCallback","onDeviceFoundCallback","onResultCallback","onDeviceStatusChangedCallback","forEach","device","clear","startScan","onStateChange","state","PoweredOn","index","indexOf","splice","startDeviceScan","scanMode","Balanced","onScanResult","OS","sendIntent","push","stopDeviceScan","sub","onDeviceFound","callback","onError","onDeviceStatusChanged","onResult","error","Error","message","advertisedName","name","trim","localName","has","id","deviceName","getDeviceName","size","deviceId","currentSize","deviceClass","createDevice","bind","onDeviceDisconnected","removeDeviceFromFoundedDevices","set","get","delete"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/services/bt-manager.ts"],"mappings":";;AAAA;AACA,SAASA,OAAO,EAAEC,QAAQ,QAAQ,cAAc;AAChD,SAIEC,QAAQ,EACRC,KAAK,QAEA,sBAAsB;AAE7B,SAASC,IAAI,QAAQ,wBAAe;AACpC,SAASC,YAAY,QAAQ,sCAAmC;AAOhE,SAASC,aAAa,QAAQ,qBAAkB;AAGhD,OAAO,MAAMC,SAAS,CAAsC;EAC1D,OAAwBC,WAAW,GAAG,EAAE,CAAC,CAAC;EAClCC,OAAO,GAAG,IAAIC,GAAG,CAA0C,CAAC;EAG5DC,kBAAkB,GAAmB,EAAE;EAI/CC,WAAWA,CACQC,UAAsB,EACtBC,eAAkB,EACnC;IAAA,KAFiBD,UAAsB,GAAtBA,UAAsB;IAAA,KACtBC,eAAkB,GAAlBA,eAAkB;IAEnC,IAAI,CAACC,aAAa,GAAG,IAAIT,aAAa,CAAC,IAAI,CAACQ,eAAe,CAAC;EAC9D;EAEOE,OAAO,GAAGA,CAAA,KAAM;IACrBX,YAAY,CAAC,MAAM,EAAE,kCAAkC,CAAC;IAExD,IAAI,CAACY,QAAQ,CAAC,CAAC;;IAEf;IACA,IAAI,IAAI,CAACC,mBAAmB,EAAE;MAC5B,IAAI,CAACA,mBAAmB,CAACC,MAAM,CAAC,CAAC;MACjC,IAAI,CAACD,mBAAmB,GAAGE,SAAS;IACtC;;IAEA;IACA,IAAI,CAACC,eAAe,GAAGD,SAAS;IAChC,IAAI,CAACE,qBAAqB,GAAGF,SAAS;IACtC,IAAI,CAACG,gBAAgB,GAAGH,SAAS;IACjC,IAAI,CAACI,6BAA6B,GAAGJ,SAAS;IAE9C,IAAI,CAACX,OAAO,CAACgB,OAAO,CAAEC,MAAM,IAAK;MAC/BA,MAAM,CAACV,OAAO,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,IAAI,CAACP,OAAO,CAACkB,KAAK,CAAC,CAAC;IAEpB,IAAI,CAACZ,aAAa,CAACC,OAAO,CAAC,CAAC;EAC9B,CAAC;EAEMY,SAAS,GAAGA,CAAA,KAAM;IACvB;IACA,IAAI,IAAI,CAACV,mBAAmB,EAAE;MAC5B,IAAI,CAACA,mBAAmB,CAACC,MAAM,CAAC,CAAC;MACjC,IAAI,CAACD,mBAAmB,GAAGE,SAAS;IACtC;IAEA,IAAI,CAACF,mBAAmB,GAAG,IAAI,CAACL,UAAU,CAACgB,aAAa,CAAEC,KAAK,IAAK;MAClE,IAAIA,KAAK,KAAK3B,KAAK,CAAC4B,SAAS,EAAE;QAC7B;QACA,MAAMC,KAAK,GAAG,IAAI,CAACrB,kBAAkB,CAACsB,OAAO,CAC3C,IAAI,CAACf,mBACP,CAAC;QAED,IAAIc,KAAK,GAAG,CAAC,CAAC,EAAE;UACd,IAAI,CAACrB,kBAAkB,CAACuB,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;QAC1C;QAEA,IAAI,CAACd,mBAAmB,EAAEC,MAAM,CAAC,CAAC;QAClC,IAAI,CAACD,mBAAmB,GAAGE,SAAS;QACpC,IAAI,CAACP,UAAU,CAACsB,eAAe,CAC7B,IAAI,EACJ;UAAEC,QAAQ,EAAElC,QAAQ,CAACmC;QAAS,CAAC,EAC/B,IAAI,CAACC,YACP,CAAC;QAEDjC,YAAY,CAAC,MAAM,EAAE,4CAA4C,CAAC;QAElE;MACF;MAEAA,YAAY,CACV,SAAS,EACT,wEACF,CAAC;;MAED;MACA;MACA;MACA,IAAIJ,QAAQ,CAACsC,EAAE,KAAK,SAAS,EAAE;QAC7BvC,OAAO,CAACwC,UAAU,CAAC,iDAAiD,CAAC;QAErE;MACF;MAEAnC,YAAY,CACV,SAAS,EACT,4EACF,CAAC;IACH,CAAC,EAAE,IAAI,CAAC;;IAER;IACA,IAAI,IAAI,CAACa,mBAAmB,EAAE;MAC5B,IAAI,CAACP,kBAAkB,CAAC8B,IAAI,CAAC,IAAI,CAACvB,mBAAmB,CAAC;IACxD;EACF,CAAC;EAEMD,QAAQ,GAAGA,CAAA,KAAM;IACtBZ,YAAY,CAAC,MAAM,EAAE,2BAA2B,CAAC;IAEjD,IAAI,CAACQ,UAAU,CAAC6B,cAAc,CAAC,CAAC;;IAEhC;IACA,IAAI,CAAC/B,kBAAkB,CAACc,OAAO,CAAEkB,GAAG,IAAKA,GAAG,CAACxB,MAAM,CAAC,CAAC,CAAC;IACtD,IAAI,CAACR,kBAAkB,GAAG,EAAE;;IAE5B;IACA,IAAI,CAACU,eAAe,GAAGD,SAAS;IAChC,IAAI,CAACE,qBAAqB,GAAGF,SAAS;IACtC,IAAI,CAACG,gBAAgB,GAAGH,SAAS;IACjC,IAAI,CAACI,6BAA6B,GAAGJ,SAAS;IAE9C,IAAI,CAACX,OAAO,CAACgB,OAAO,CAAEC,MAAM,IAAK;MAC/BA,MAAM,CAACV,OAAO,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,IAAI,CAACP,OAAO,CAACkB,KAAK,CAAC,CAAC;EACtB,CAAC;EAEMiB,aAAa,GAClBC,QAGkB,IACf;IACHxC,YAAY,CAAC,MAAM,EAAE,4CAA4C,CAAC;IAClE,IAAI,CAACiB,qBAAqB,GAAGuB,QAAQ;EACvC,CAAC;EAEMC,OAAO,GAAID,QAAwC,IAAK;IAC7DxC,YAAY,CAAC,MAAM,EAAE,sCAAsC,CAAC;IAC5D,IAAI,CAACgB,eAAe,GAAGwB,QAAQ;EACjC,CAAC;EAEME,qBAAqB,GAC1BF,QAAqD,IAClD;IACHxC,YAAY,CAAC,MAAM,EAAE,oDAAoD,CAAC;IAC1E,IAAI,CAACmB,6BAA6B,GAAGqB,QAAQ;EAC/C,CAAC;EAEMG,QAAQ,GACbH,QAAyD,IACtD;IACHxC,YAAY,CAAC,MAAM,EAAE,uCAAuC,CAAC;IAC7D,IAAI,CAACkB,gBAAgB,GAAGsB,QAAQ;EAClC,CAAC;;EAED;;EAWQP,YAAY,GAAGA,CAACW,KAAsB,EAAEvB,MAAqB,KAAK;IACxE,IAAI;MACF,IAAIuB,KAAK,EAAE;QACT,IAAI,CAAC5B,eAAe,GAAG;UACrB4B,KAAK,EAAEA;QACT,CAAC,CAAC;QACF5C,YAAY,CAAC,OAAO,EAAE,+BAA+B,EAAE;UACrD4C,KAAK,EAAEA,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAGF;QAClD,CAAC,CAAC;QACF7C,IAAI,CAAC6C,KAAK,EAAE,+BAA+B,EAAE;UAAEA;QAAM,CAAC,CAAC;QAEvD;MACF;;MAEA;AACN;AACA;AACA;AACA;AACA;MACM,MAAMG,cAAc,GAClB1B,MAAM,EAAE2B,IAAI,EAAEC,IAAI,CAAC,CAAC,IAAI5B,MAAM,EAAE6B,SAAS,EAAED,IAAI,CAAC,CAAC,IAAI,EAAE;MAEzD,IAAI,CAAC5B,MAAM,IAAI,CAAC0B,cAAc,EAAE;QAC9B;MACF;MAEA,IAAI,IAAI,CAAC3C,OAAO,CAAC+C,GAAG,CAAC9B,MAAM,CAAC+B,EAAE,CAAC,EAAE;QAC/B;MACF;MAEA,MAAMC,UAAU,GAAG,IAAI,CAAC3C,aAAa,CAAC4C,aAAa,CAACP,cAAc,CAAC;MAEnE,IAAI,CAACM,UAAU,EAAE;QACf;MACF;;MAEA;MACA,IAAI,IAAI,CAACjD,OAAO,CAACmD,IAAI,IAAIrD,SAAS,CAACC,WAAW,EAAE;QAC9CH,YAAY,CACV,SAAS,EACT,4DAA4D,EAC5D;UACEwD,QAAQ,EAAEnC,MAAM,CAAC+B,EAAE;UACnBC,UAAU,EAAEhC,MAAM,CAAC2B,IAAI;UACvBS,WAAW,EAAE,IAAI,CAACrD,OAAO,CAACmD;QAC5B,CACF,CAAC;QAED;MACF;MAEA,MAAMG,WAAW,GAAG,IAAI,CAAChD,aAAa,CAACiD,YAAY,CAAC;QAClDtC,MAAM;QACNgC,UAAU;QACVZ,OAAO,EAAE,IAAI,CAACzB,eAAe,EAAE4C,IAAI,CAAC,IAAI,CAAC;QACzClB,qBAAqB,EAAE,IAAI,CAACvB,6BAA6B,EAAEyC,IAAI,CAAC,IAAI,CAAC;QACrEjB,QAAQ,EAAE,IAAI,CAACzB,gBAAgB,EAAE0C,IAAI,CAAC,IAAI,CAAC;QAC3CC,oBAAoB,EAAEA,CAAA,KAAM;UAC1B,IAAI,CAACtC,SAAS,CAAC,CAAC;UAChB,IAAI,CAACuC,8BAA8B,EAAEF,IAAI,CAAC,IAAI,CAAC,CAACvC,MAAM,CAAC+B,EAAE,CAAC;QAC5D;MACF,CAAC,CAAC;MAEF,IAAI,CAAChD,OAAO,CAAC2D,GAAG,CAAC1C,MAAM,CAAC+B,EAAE,EAAEM,WAAW,CAAC;MAExC,IAAI,CAACzC,qBAAqB,GAAGyC,WAAW,EAAE,IAAI,CAAC;IACjD,CAAC,CAAC,OAAOd,KAAK,EAAE;MACd5C,YAAY,CAAC,OAAO,EAAE,mCAAmC,EAAE;QACzD4C,KAAK,EAAEA,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAGF,KAAK;QACrDY,QAAQ,EAAEnC,MAAM,EAAE+B,EAAE;QACpBC,UAAU,EAAEhC,MAAM,EAAE2B;MACtB,CAAC,CAAC;MACFjD,IAAI,CAAC6C,KAAK,EAAE,mCAAmC,EAAE;QAC/CA,KAAK;QACLY,QAAQ,EAAEnC,MAAM,EAAE+B,EAAE;QACpBC,UAAU,EAAEhC,MAAM,EAAE2B;MACtB,CAAC,CAAC;IACJ;EACF,CAAC;EAEOc,8BAA8B,GAAIN,QAAgB,IAAK;IAC7DxD,YAAY,CACV,MAAM,EACN,2EAA2E,EAC3E;MACEwD,QAAQ;MACRH,UAAU,EAAE,IAAI,CAACjD,OAAO,CAAC4D,GAAG,CAACR,QAAQ,CAAC,EAAEnC,MAAM,EAAE2B;IAClD,CACF,CAAC;IACD,IAAI,CAAC5C,OAAO,CAAC6D,MAAM,CAACT,QAAQ,CAAC;EAC/B,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["Linking","Platform","ScanMode","State","slog","sentryLogger","DeviceCreator","BTManager","MAX_DEVICES","devices","Map","eventSubscriptions","lastScanTimestamp","constructor","bleManager","acceptedDevices","deviceCreator","destroy","stopScan","stateChangeListener","remove","undefined","onErrorCallback","onDeviceFoundCallback","onResultCallback","onDeviceStatusChangedCallback","forEach","device","clear","startScan","Date","now","onStateChange","state","PoweredOn","index","indexOf","splice","startDeviceScan","scanMode","Balanced","onScanResult","OS","sendIntent","enable","push","stopDeviceScan","sub","onDeviceFound","callback","onError","onDeviceStatusChanged","onResult","error","Error","message","name","has","id","deviceName","getDeviceName","size","deviceId","currentSize","deviceClass","createDevice","bind","onDeviceDisconnected","removeDeviceFromFoundedDevices","set","get","delete"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/services/bt-manager.ts"],"mappings":"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","ignoreList":[]}
@@ -74,13 +74,7 @@ export class DeviceCreator {
74
74
  if (!params.device) {
75
75
  throw new Error("Device is required");
76
76
  }
77
-
78
- /**
79
- * On iOS the peripheral's `name` is null in scan callbacks until it is connected —
80
- * `localName` carries the advertised name instead. Accept either so a scan-time
81
- * `createDevice` call for a real iOS ad is not rejected before it can connect.
82
- */
83
- if (!params.device.name?.trim() && !params.device.localName?.trim()) {
77
+ if (!params.device.name?.trim()) {
84
78
  throw new Error("Device name is required");
85
79
  }
86
80
  if (!params.device.id) {
@@ -1 +1 @@
1
- {"version":3,"names":["integratedDevicesMap","IntegratedDevices","isCustomDeviceDefinition","BC01Device","BP2Device","CustomDevice","F4Device","SPO2Device","VerovalDuoControlDevice","VerovalEcgDevice","DEVICE_CLASSES","BP2","F4","PC60WF","BC01","VEROVAL_DUO_CONTROL","VEROVAL_ECG","collectCustomDevices","acceptedDevices","customDevices","Map","matchers","Set","forEach","entry","index","Error","has","id","nameMatch","source","set","add","DeviceCreator","deviceNameCache","CACHE_MAX_SIZE","constructor","acceptedDeviceNames","getDeviceName","foundName","undefined","get","matched","matchDeviceName","cacheDeviceName","createDevice","params","String","deviceName","trim","device","name","localName","custom","deviceClass","Object","keys","join","destroy","clear","regex","deviceType","test","some","values","size","firstKey","next","value","delete"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/services/device-creator.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["integratedDevicesMap","IntegratedDevices","isCustomDeviceDefinition","BC01Device","BP2Device","CustomDevice","F4Device","SPO2Device","VerovalDuoControlDevice","VerovalEcgDevice","DEVICE_CLASSES","BP2","F4","PC60WF","BC01","VEROVAL_DUO_CONTROL","VEROVAL_ECG","collectCustomDevices","acceptedDevices","customDevices","Map","matchers","Set","forEach","entry","index","Error","has","id","nameMatch","source","set","add","DeviceCreator","deviceNameCache","CACHE_MAX_SIZE","constructor","acceptedDeviceNames","getDeviceName","foundName","undefined","get","matched","matchDeviceName","cacheDeviceName","createDevice","params","String","deviceName","trim","device","name","custom","deviceClass","Object","keys","join","destroy","clear","regex","deviceType","test","some","values","size","firstKey","next","value","delete"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/services/device-creator.ts"],"mappings":"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","ignoreList":[]}
@@ -1,43 +1,16 @@
1
1
  "use strict";
2
2
 
3
- import { MeasurementTypeKey } from "@ovok/core";
4
3
  import { CaseType } from "../../../types/case-type.js";
5
- import { hexToByte } from "../../../utils/hex-to-byte.js";
6
4
  import { BTManagedDevice } from "../bt-managed-device.js";
7
- import { Bc01CommandSequencer } from "./bc01-command-sequencer.js";
8
- import { BC01_ANALYTE_ORDER, parseBc01Record } from "./bc01-frame-parser.js";
9
5
  import { bc01MainServices } from "./bc01.main-services.js";
10
6
 
11
- /** Minimum bytes a complete frame carries, keyed by its opening opcode. */
12
- const BC01_FRAME_MIN_LENGTH = {
13
- 0xf0: 2,
14
- // ACK
15
- 0xf2: 8,
16
- // Version reply (variable — 8 is the minimum PHMS reads before answering)
17
- 0xf3: 3,
18
- // Time-sync ack
19
- 0xe0: 7,
20
- // Record-count reply
21
- 0xe1: 16,
22
- // Stored URS record
23
- 0xe2: 16,
24
- // Paginated URS record
25
- 0xe3: 3,
26
- // Finish
27
- 0xe4: 36,
28
- // Quantitative record (optional path)
29
- 0xe5: 36 // Quantitative record (optional path)
30
- };
31
-
32
7
  /**
33
8
  * Contec BC401 (BC01) urine analyzer driver.
34
9
  *
35
- * The BC401 is a memory device, not a live stream: every measurement the
36
- * patient takes is written to onboard 500-slot flash the moment the strip
37
- * finishes reacting, and the app pulls stored records over BLE only after the
38
- * host walks the reset → version → set-time → count → get-records handshake
39
- * documented in `bc01-command-sequencer.ts`. Every record arrives as one
40
- * 16-byte E1/E2 frame on 0xFF02.
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.
41
14
  */
42
15
  export class BC01Device extends BTManagedDevice {
43
16
  onStreamStart = () => {};
@@ -45,101 +18,66 @@ export class BC01Device extends BTManagedDevice {
45
18
 
46
19
  /**
47
20
  * 90 s covers the maximum firmware-side reagent-pad settle time on a URS-7
48
- * strip and leaves headroom for a bulk memory dump of every stored record.
49
- * If the device does not push a frame within that window the data processor
50
- * times out and the driver surfaces "device unreachable".
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".
51
23
  */
52
24
  stuckDataTimeout = 90_000;
53
- constructor(device, params) {
54
- super(device, params);
55
-
56
- /**
57
- * The BC401 answers one command with one frame and picks the next command
58
- * by the first byte of that frame. The sequencer walks reset → version →
59
- * set-time → count → records, and acknowledges the last record of every
60
- * set. The parent's default `pollingSequencerFor` would only re-send the
61
- * declared reset forever, which the firmware ignores after the first one.
62
- */
63
- this.createCommandSequencer = () => new Bc01CommandSequencer({
64
- write: {
65
- serviceUuid: bc01MainServices[0].uuid,
66
- characteristicUuid: bc01MainServices[0].writeUuid.uuid
67
- },
68
- onRefused: reason => this.onError?.(new Error(`BC401 handshake: ${reason}`))
69
- });
70
- }
71
-
72
- /**
73
- * Returns true once the notification buffer holds a complete BC401 frame,
74
- * classified by its opening opcode. Anything else — a heartbeat opcode we
75
- * do not recognise, or a partial buffer — is held back until enough bytes
76
- * arrive to make sense of it. There is no aa55 header on this hardware.
77
- */
78
25
  validatePackage = pkg => {
79
- if (pkg.length === 0) {
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) {
80
35
  return false;
81
36
  }
82
- const opcode = hexToByte(pkg[0] ?? "");
83
- const minLength = BC01_FRAME_MIN_LENGTH[opcode];
84
- if (minLength === undefined) {
37
+ if (headIndex > 0) {
38
+ pkg = pkg.slice(headIndex);
39
+ }
40
+ if (pkg.length < 5) {
85
41
  return false;
86
42
  }
87
- return pkg.length >= minLength;
88
- };
89
-
90
- /**
91
- * The parsing model declares every E1/E2 frame as `DEPENDENT`, so this hook
92
- * runs for each record. We decode the raw bytes here — the packed 3-bits-per
93
- * -pad layout is not expressible in the declaration parser — and report the
94
- * reading directly through `onResult`. The frame is then handed back as
95
- * `OTHER` so the state machine does not report it a second time and does
96
- * not dedupe consecutive records that happen to share the same opcode.
97
- */
98
- handleDependentResult = data => {
99
- if (data.frame) {
100
- this.reportUrsRecord(data.frame);
43
+ const lengthByte = parseInt(pkg[2] ?? "0", 16) || 0;
44
+ const totalLen = 3 + lengthByte;
45
+ if (pkg.length < totalLen) {
46
+ return false;
101
47
  }
102
- return {
103
- ...data,
104
- parsingCase: {
105
- ...data.parsingCase,
106
- caseType: CaseType.OTHER
107
- }
108
- };
48
+ return true;
109
49
  };
110
-
111
- /**
112
- * Nothing to do here for the BC401. Every reading arrives through the
113
- * dependent-result path, and the state machine sees only the `OTHER`-typed
114
- * echo we return from `handleDependentResult`.
115
- */
116
- handleSuccessResult() {
117
- return;
118
- }
119
- reportUrsRecord(frame) {
120
- const parsed = parseBc01Record(frame);
121
- if (!parsed) {
50
+ handleSuccessResult(successResult) {
51
+ if (successResult.caseType !== CaseType.RESULT) {
122
52
  return;
123
53
  }
124
- const measuredValues = BC01_ANALYTE_ORDER.reduce((acc, analyte) => {
125
- const value = parsed.values[analyte];
126
- if (value !== undefined) {
127
- acc[analyte] = value;
128
- }
129
- return acc;
130
- }, {});
131
- if (Object.keys(measuredValues).length === 0) {
132
- this.onError?.("feedback-messages.measurement.disturb-detected-error");
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);
133
64
  return;
134
65
  }
135
- const reading = {
136
- caseType: CaseType.RESULT,
137
- measurementTypeKey: MeasurementTypeKey.uricAcid,
138
- urineValues: [],
139
- recordedAt: parsed.timestamp,
140
- ...measuredValues
141
- };
142
- this.onResult?.(reading);
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;
143
81
  }
144
82
  }
145
83
  //# sourceMappingURL=bc01.device.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MeasurementTypeKey","CaseType","hexToByte","BTManagedDevice","Bc01CommandSequencer","BC01_ANALYTE_ORDER","parseBc01Record","bc01MainServices","BC01_FRAME_MIN_LENGTH","BC01Device","onStreamStart","mainServices","stuckDataTimeout","constructor","device","params","createCommandSequencer","write","serviceUuid","uuid","characteristicUuid","writeUuid","onRefused","reason","onError","Error","validatePackage","pkg","length","opcode","minLength","undefined","handleDependentResult","data","frame","reportUrsRecord","parsingCase","caseType","OTHER","handleSuccessResult","parsed","measuredValues","reduce","acc","analyte","value","values","Object","keys","reading","RESULT","measurementTypeKey","uricAcid","urineValues","recordedAt","timestamp","onResult"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bc01/bc01.device.ts"],"mappings":"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","ignoreList":[]}
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":[]}
@@ -5,57 +5,93 @@ import { CaseType } from "../../../types/case-type.js";
5
5
  /**
6
6
  * Contec BC401 (a.k.a. BC01) urine analyzer — GATT profile.
7
7
  *
8
- * The BC401 uses Contec's proprietary FF12 service, shared across their
9
- * consumer medical devices. Every stored URS-7 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
+ * 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.
12
11
  *
13
12
  * Service 0xFF12
14
- * Notify (result) 0xFF02 — CCCD 0x2902 must be written 01 00 to enable
15
- * Write (command) 0xFF01 — RESET / SET_TIME / GET_COUNT / GET_RECORDS
13
+ * Notify (result) 0xFF01 — CCCD 0x2902 must be written 01 00 to enable
14
+ * Write (command) 0xFF02 — RESET / SET_UNIT / REQUEST_HISTORY
16
15
  *
17
- * On the wire a stored URS record opens with 0xE1 (single) or 0xE2 (paginated).
18
- * The remaining fifteen bytes carry the flags nibble, timestamp, seven bytes of
19
- * packed 3-bit analyte indices, and a checksum. `bc01-frame-parser.ts` decodes
20
- * them; this file just declares the GATT surface and hands every E1/E2 frame
21
- * to the driver's dependent-result path so the parser can run.
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).
22
28
  */
23
29
  export const bc01MainServices = [{
24
30
  uuid: "0000ff12-0000-1000-8000-00805f9b34fb",
25
- /**
26
- * PHMS 3.0.03 writes `[0x80, 0x00]` to 0xFF01 the moment its GATT
27
- * subscription is up — decompiled at L1/f.java:694 ("发送复位命令" — "send
28
- * reset command"). The device answers nothing until this reset lands. The
29
- * `Bc01CommandSequencer` returns the same reset from `initialCommands()`
30
- * so the SDK sends it whether or not the polling default is in play.
31
- */
32
- writeUuid: {
33
- uuid: "0000ff01-0000-1000-8000-00805f9b34fb",
34
- mainCommandUuid: "8000"
35
- },
36
31
  monitorUuids: [{
37
- uuid: "0000ff02-0000-1000-8000-00805f9b34fb",
38
- /**
39
- * We key on the first byte only. A `DEPENDENT` case fires
40
- * `handleDependentResult` in the driver, which runs the real decoder
41
- * (`parseBc01Record`) against the raw frame bytes and calls
42
- * `onResult` directly. The parsing case itself carries no field
43
- * definitions — the packed 3-bits-per-pad layout is not expressible
44
- * with the ordinary declaration parser and would need the vendor's
45
- * own decoding table pinned in a declaration to be so.
46
- */
32
+ uuid: "0000ff01-0000-1000-8000-00805f9b34fb",
47
33
  parsingModel: {
48
- caseValuePosition: [0],
34
+ caseValuePosition: [0, 1, 3, 4],
49
35
  cases: [{
50
36
  measurementTypeKey: MeasurementTypeKey.uricAcid,
51
- caseType: CaseType.DEPENDENT,
52
- caseValue: "e1",
53
- parseDefinitions: []
54
- }, {
55
- measurementTypeKey: MeasurementTypeKey.uricAcid,
56
- caseType: CaseType.DEPENDENT,
57
- caseValue: "e2",
58
- parseDefinitions: []
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
+ }]
59
95
  }]
60
96
  }
61
97
  }]
@@ -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","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":[]}
@@ -13,6 +13,7 @@ export declare class BTManager<T extends readonly AcceptedDevice[]> {
13
13
  private stateChangeListener;
14
14
  private eventSubscriptions;
15
15
  private deviceCreator;
16
+ private lastScanTimestamp;
16
17
  constructor(bleManager: BleManager, acceptedDevices: T);
17
18
  destroy: () => void;
18
19
  startScan: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"bt-manager.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/services/bt-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,UAAU,EAKX,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,qBAAa,SAAS,CAAC,CAAC,SAAS,SAAS,cAAc,EAAE;IAUtD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAVlC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAM;IACzC,OAAO,CAAC,OAAO,CAAsD;IAErE,OAAO,CAAC,mBAAmB,CAA2B;IACtD,OAAO,CAAC,kBAAkB,CAAsB;IAEhD,OAAO,CAAC,aAAa,CAAmB;gBAGrB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,CAAC;IAK9B,OAAO,aAuBZ;IAEK,SAAS,aAuDd;IAEK,QAAQ,aAmBb;IAEK,aAAa,GAClB,WAAW,CACT,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAClB,OAAO,CAAC,IAAI,CAAC,UAIlB;IAEK,OAAO,GAAI,WAAW,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,UAGxD;IAEK,qBAAqB,GAC1B,WAAW,CAAC,IAAI,EAAE,0BAA0B,KAAK,IAAI,UAIrD;IAEK,QAAQ,GACb,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,UAIzD;IAGF,OAAO,CAAC,gBAAgB,CAAC,CAAiD;IAC1E,OAAO,CAAC,eAAe,CAAC,CAAgC;IACxD,OAAO,CAAC,qBAAqB,CAAC,CAGX;IACnB,OAAO,CAAC,6BAA6B,CAAC,CAE5B;IAEV,OAAO,CAAC,YAAY,CA+ElB;IAEF,OAAO,CAAC,8BAA8B,CAUpC;CACH"}
1
+ {"version":3,"file":"bt-manager.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/services/bt-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,UAAU,EAKX,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,qBAAa,SAAS,CAAC,CAAC,SAAS,SAAS,cAAc,EAAE;IAWtD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAXlC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAM;IACzC,OAAO,CAAC,OAAO,CAAsD;IAErE,OAAO,CAAC,mBAAmB,CAA2B;IACtD,OAAO,CAAC,kBAAkB,CAAsB;IAEhD,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,iBAAiB,CAAa;gBAGnB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,CAAC;IAK9B,OAAO,aAyBZ;IAEK,SAAS,aA0Dd;IAEK,QAAQ,aAmBb;IAEK,aAAa,GAClB,WAAW,CACT,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAClB,OAAO,CAAC,IAAI,CAAC,UAIlB;IAEK,OAAO,GAAI,WAAW,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,UAGxD;IAEK,qBAAqB,GAC1B,WAAW,CAAC,IAAI,EAAE,0BAA0B,KAAK,IAAI,UAIrD;IAEK,QAAQ,GACb,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,UAIzD;IAGF,OAAO,CAAC,gBAAgB,CAAC,CAAiD;IAC1E,OAAO,CAAC,eAAe,CAAC,CAAgC;IACxD,OAAO,CAAC,qBAAqB,CAAC,CAGX;IACnB,OAAO,CAAC,6BAA6B,CAAC,CAE5B;IAEV,OAAO,CAAC,YAAY,CAsElB;IAEF,OAAO,CAAC,8BAA8B,CAUpC;CACH"}
@@ -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,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAMrD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AA6D9D,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,cAAc,EAAE;IAKhD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAJhD,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsC;gBAEvC,mBAAmB,EAAE,CAAC;IAI5C,aAAa,GAAI,WAAW,MAAM,KAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAkBpE;IAEK,YAAY,CAAC,CAAC,SAAS,SAAS,EACrC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC5B,eAAe,CAAC,CAAC,CAAC;IAwCd,OAAO,aAEZ;IAEF;;;OAGG;IACH,OAAO,CAAC,eAAe,CAmBrB;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,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAMrD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AA6D9D,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,cAAc,EAAE;IAKhD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAJhD,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsC;gBAEvC,mBAAmB,EAAE,CAAC;IAI5C,aAAa,GAAI,WAAW,MAAM,KAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAkBpE;IAEK,YAAY,CAAC,CAAC,SAAS,SAAS,EACrC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC5B,eAAe,CAAC,CAAC,CAAC;IAmCd,OAAO,aAEZ;IAEF;;;OAGG;IACH,OAAO,CAAC,eAAe,CAmBrB;IAEF,OAAO,CAAC,eAAe;CAexB"}
@@ -1,53 +1,33 @@
1
- import { Device } from "react-native-ble-plx";
2
- import { CreateDeviceParams } from "../../../types/create-device-params";
3
- import { DependentResultHandlerParams } from "../../../types/dependent-result-handler-params";
4
1
  import { MeasurementTypeForDevices } from "../../../types/device-measurement-map";
5
2
  import { IntegratedDevices } from "../../../types/integrated-devices";
3
+ import { MeasurementWithCaseType } from "../../../types/measurement-with-case-type";
6
4
  import { IService } from "../../../types/service.type";
7
5
  import { BTManagedDevice } from "../bt-managed-device";
8
6
  /**
9
7
  * Contec BC401 (BC01) urine analyzer driver.
10
8
  *
11
- * The BC401 is a memory device, not a live stream: every measurement the
12
- * patient takes is written to onboard 500-slot flash the moment the strip
13
- * finishes reacting, and the app pulls stored records over BLE only after the
14
- * host walks the reset → version → set-time → count → get-records handshake
15
- * documented in `bc01-command-sequencer.ts`. Every record arrives as one
16
- * 16-byte E1/E2 frame on 0xFF02.
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.
17
13
  */
18
14
  export declare class BC01Device extends BTManagedDevice<IntegratedDevices.BC01> {
19
15
  protected onStreamStart: () => void;
20
16
  protected mainServices: IService[];
21
17
  /**
22
18
  * 90 s covers the maximum firmware-side reagent-pad settle time on a URS-7
23
- * strip and leaves headroom for a bulk memory dump of every stored record.
24
- * If the device does not push a frame within that window the data processor
25
- * times out and the driver surfaces "device unreachable".
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".
26
21
  */
27
22
  protected stuckDataTimeout: number;
28
- constructor(device: Device, params: CreateDeviceParams<IntegratedDevices.BC01>);
29
- /**
30
- * Returns true once the notification buffer holds a complete BC401 frame,
31
- * classified by its opening opcode. Anything else — a heartbeat opcode we
32
- * do not recognise, or a partial buffer — is held back until enough bytes
33
- * arrive to make sense of it. There is no aa55 header on this hardware.
34
- */
35
23
  protected validatePackage: (pkg: string[]) => boolean;
24
+ protected handleSuccessResult(successResult: MeasurementWithCaseType<MeasurementTypeForDevices<[IntegratedDevices.BC01]>>): void | boolean;
25
+ private handleUrinalysisResult;
36
26
  /**
37
- * The parsing model declares every E1/E2 frame as `DEPENDENT`, so this hook
38
- * runs for each record. We decode the raw bytes here — the packed 3-bits-per
39
- * -pad layout is not expressible in the declaration parser — and report the
40
- * reading directly through `onResult`. The frame is then handed back as
41
- * `OTHER` so the state machine does not report it a second time and does
42
- * not dedupe consecutive records that happen to share the same opcode.
43
- */
44
- protected handleDependentResult: (data: DependentResultHandlerParams<MeasurementTypeForDevices<[IntegratedDevices.BC01]>>) => DependentResultHandlerParams<MeasurementTypeForDevices<[IntegratedDevices.BC01]>>;
45
- /**
46
- * Nothing to do here for the BC401. Every reading arrives through the
47
- * dependent-result path, and the state machine sees only the `OTHER`-typed
48
- * echo we return from `handleDependentResult`.
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.
49
30
  */
50
- protected handleSuccessResult(): void | boolean;
51
- private reportUrsRecord;
31
+ private checkIfHasError;
52
32
  }
53
33
  //# sourceMappingURL=bc01.device.d.ts.map
@@ -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;AAI9C,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;AAmBvD;;;;;;;;;GASG;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;;;;;OAKG;IACH,SAAS,CAAC,gBAAgB,SAAU;gBAExB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAqB9E;;;;;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;;;;OAIG;IACH,SAAS,CAAC,mBAAmB,IAAI,IAAI,GAAG,OAAO;IAI/C,OAAO,CAAC,eAAe;CAqCxB"}
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"}
@@ -2,20 +2,26 @@ import { IService } from "../../../types/service.type";
2
2
  /**
3
3
  * Contec BC401 (a.k.a. BC01) urine analyzer — GATT profile.
4
4
  *
5
- * The BC401 uses Contec's proprietary FF12 service, shared across their
6
- * consumer medical devices. Every stored URS-7 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`.
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.
9
8
  *
10
9
  * 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
10
+ * Notify (result) 0xFF01 — CCCD 0x2902 must be written 01 00 to enable
11
+ * Write (command) 0xFF02 — RESET / SET_UNIT / REQUEST_HISTORY
13
12
  *
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.
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).
19
25
  */
20
26
  export declare const bc01MainServices: IService[];
21
27
  //# 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;AAEvD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,EAuFtC,CAAC"}