@ovok/native/bt-management

Bluetooth Low Energy device management: scanning, pairing, connecting, reading measurements and syncing them.

  • Stable unknown
  • Release candidate since 1.16.1-rc.3
  • Development since 1.16.1-dev.2111+9796905

Bluetooth Low Energy device management: scanning, pairing, connecting, reading measurements and syncing them.

Import from @ovok/native/bt-management.

Components

BluetoothDevicePicker()

function BluetoothDevicePicker(__namedParameters): Element;

A theme-aware picker for BTManager's multi-device auto-connect callback.

Parameters

ParameterType
__namedParametersBluetoothDevicePickerProps

Returns

Element


BluetoothRuntimeProvider()

function BluetoothRuntimeProvider(__namedParameters): Element;

Provides a BluetoothRuntime to the Bluetooth hooks below it.

Parameters

ParameterType
__namedParametersPropsWithChildren<{ runtime: BluetoothRuntime; }>

Returns

Element


BTProvider()

function BTProvider<T>(__namedParameters):
  | string
  | number
  | bigint
  | boolean
  | Iterable<ReactNode, any, any>
  | Promise<AwaitedReactNode>
  | Element
  | null
  | undefined;

Provides Bluetooth management to its children, optionally requesting permission on mount and gating the children behind it.

Type Parameters

Type Parameter
T extends readonly AcceptedDevice[]

Parameters

ParameterType
__namedParametersPropsWithChildren<BTProviderProps<T>>

Returns

| string | number | bigint | boolean | Iterable<ReactNode, any, any> | Promise<AwaitedReactNode> | Element | null | undefined


DefaultPermissionFallback()

function DefaultPermissionFallback(__namedParameters): Element;

Default screen shown when Bluetooth permission is denied or blocked, with a button to request access or open settings.

Parameters

ParameterType
__namedParametersBTProviderPermissionFallbackProps

Returns

Element

Hooks

useBackgroundSync()

function useBackgroundSync(__namedParameters?): object;

Turns background Bluetooth sync on or off and reports its status.

Parameters

ParameterType
__namedParameters?UseBackgroundSyncOptions

Returns

NameTypeDescription
enabledbooleanWhether background sync is on.
error?ErrorError from the last attempt to change the state.
flush()() => Promise<void>Delivers queued background results now.
reason?stringWhy sync is restricted, when it is.
setEnabled()(enabled) => Promise<void>Turns background sync on or off.
statusBackgroundSyncStatusCurrent sync status.

useBluetoothPermission()

function useBluetoothPermission(__namedParameters?): object;

Tracks Bluetooth permission and requests it, again when the app resumes from settings.

Parameters

ParameterType
__namedParameters?UseBluetoothPermissionOptions

Returns

NameTypeDefault valueDescription
accessPermissionboolean | undefined-Whether permission is granted; undefined until known.
openSettings()() => void-Opens the system settings for the app.
request()() => Promise<boolean>-Asks the user for Bluetooth permission.
requestPermission()() => Promise<boolean>requestAlias of request.
statusBluetoothPermissionStatus-Current permission status.

useBluetoothRuntime()

function useBluetoothRuntime(): BluetoothRuntime;

Returns the runtime of the enclosing BTProvider.

Returns

BluetoothRuntime

Throws

If rendered outside BTProvider.


useBluetoothSelector()

function useBluetoothSelector<Selection>(selector, isEqual?): Selection;

Subscribes to a slice of the runtime state, re-rendering only when it changes by isEqual.

Type Parameters

Type Parameter
Selection

Parameters

ParameterTypeDefault value
selector(snapshot) => Selectionundefined
isEqual?(previous, next) => booleanObject.is

Returns

Selection


useBluetoothState()

function useBluetoothState(__namedParameters?): object;

Reports whether Bluetooth is usable, folding permission status into the adapter state.

Parameters

ParameterType
__namedParameters?UseBluetoothStateOptions

Returns

NameTypeDescription
openSettings()() => voidOpens the system settings for the app.
permissionStatusBluetoothPermissionStatusCurrent permission status.
requestPermission()() => Promise<boolean>Asks the user for Bluetooth permission.
stateBluetoothStateAdapter state; unauthorized when permission is denied or blocked.

useBTDevice()

function useBTDevice<Filter>(filter, __namedParameters?): object;

Follows and controls one device matched by a model key or filter.

Type Parameters

Type Parameter
Filter extends BTDeviceFilter

Parameters

ParameterType
filterFilter
__namedParameters?UseBTDeviceOptions

Returns

NameTypeDefault valueDescription
connect()() => Promise<void>-Connects to the selected device.
deviceRuntimeDevice | undefinedselectedThe selected device, if any.
devicesreadonly RuntimeDevice[]matchesEvery device matching the filter.
disconnect()() => Promise<void>-Disconnects from the selected device.
eventsreadonly DeviceConnectionEvent[]-Recent connection events of the selected device.
latestResultRuntimeResult | undefinedselected.latestResultMost recent result of the selected device.
modelFilter extends DeviceKey ? Filter : undefined-Model key asked for; undefined for a filter.
rawRawBluetoothAccess | undefined-Raw GATT access, when allowRawAccess is set.
requiresSelectionboolean-True when several devices match and none is selected.
resultsreadonly RuntimeResult[]-Recent results of the selected device.
select()(deviceId) => boolean-Selects a device by ID.
statusDeviceStatus | undefinedselected.statusStatus of the selected device.

useBTDevices()

function useBTDevices(filter): readonly RuntimeDevice[];

Every connected or nearby device filter asks for, in the order Bluetooth found them.

Parameters

ParameterType
filterBTDeviceFilter

Returns

readonly RuntimeDevice[]


useDeviceConnection()

function useDeviceConnection(id?): object;

Follows the status and connection events of one device.

Parameters

ParameterType
id?string

Returns

NameTypeDescription
eventsreadonly DeviceConnectionEvent[]Recent connection events, oldest first.
status?DeviceStatusLatest status of the device.

useHealthImport()

function useHealthImport<TType>(__namedParameters): object;

Manages the health data import switch and the access status of the given types.

Type Parameters

Type Parameter
TType extends string

Parameters

ParameterType
__namedParameters{ adapter: HealthImportAdapter<TType>; background?: boolean; types: readonly TType[]; }
__namedParameters.adapterHealthImportAdapter<TType>
__namedParameters.background?boolean
__namedParameters.typesreadonly TType[]

Returns

NameTypeDescription
enabledbooleanWhether import is switched on.
error?ErrorError of the last status check or request.
notSharedreadonly TType[]Types the user has not shared.
setEnabled()(enabled) => Promise<void>Switches import on, requesting access first, or off.
statusByTypePartial<Record<TType, Awaited<ReturnType<HealthImportAdapter<TType>["getStatus"]>>>>Access status per type.

useMeasurements()

function useMeasurements(onResult?, __namedParameters?): object;

Collects results from every device, filtered by a result policy.

Parameters

ParameterType
onResult?(result) => void
__namedParameters?UseMeasurementsOptions

Returns

NameTypeDescription
clear()() => voidClears the collected results.
measurementsreadonly RuntimeResult[]Kept results, oldest first.

useNearbyDeviceOffer()

function useNearbyDeviceOffer(__namedParameters): object;

Offers a newly found, not yet paired nearby device to the user to accept, decline or postpone.

Parameters

ParameterType
__namedParametersUseNearbyDeviceOfferOptions

Returns

NameTypeDescription
accept()() => Promise<void>Pairs the offered device and remembers it.
decline()(deviceId?) => Promise<void>Remembers a device as declined so it is not offered again.
device?RuntimeDeviceDevice currently offered.
error?BluetoothErrorError from the last pairing attempt.
later()() => voidHides the current offer until the app restarts.
statusNearbyDeviceOfferStatusOffer status.
undecline()(deviceId) => Promise<void>Forgets a declined device so it can be offered again.

useNearbyDevices()

function useNearbyDevices(): object;

Lists devices found by scanning and connects to one on request.

Returns

NameTypeDescription
devicesreadonly RuntimeDevice[]Devices currently found.
pair()(id) => Promise<RuntimeDevice | undefined>Connects to the device with the given ID; resolves to it, or undefined if unknown.

useOpenSeries()

function useOpenSeries(manager): readonly OpenSeries[];

The series a BTManager is recording, updated as each value arrives: the live values to show while a device streams (latest), before the series is stored.

Parameters

ParameterType
managerSeriesSource | undefined

Returns

readonly OpenSeries[]


usePairedDevices()

function usePairedDevices(__namedParameters): object;

Keeps a persisted list of paired device IDs, optionally connecting to them automatically.

Parameters

ParameterType
__namedParametersUsePairedDevicesOptions

Returns

NameTypeDescription
forget()(id) => Promise<void>Disconnects a device and removes it from the paired list.
pair()(device) => Promise<void>Adds a device to the paired list.
pairedreadonly string[]IDs of the paired devices.

useQueuedResults()

function useQueuedResults<T>(coordinator): readonly BackgroundSyncResult<T>[];

The results a BackgroundSyncCoordinator still holds for the current account: readings not saved yet.

Type Parameters

Type Parameter
T extends DeviceKey

Parameters

ParameterType
coordinatorQueueSource<T> | undefined

Returns

readonly BackgroundSyncResult<T>[]


useRequestPermissions()

function useRequestPermissions(__namedParameters): object;

Requests Bluetooth permission for BTProvider, optionally on mount.

Parameters

ParameterType
__namedParametersPick<BTProviderProps<IntegratedDevices[]>, "onAccessPermissionChanged" | "requestPermissionOnMount">

Returns

NameTypeDefault valueDescription
accessPermissionboolean | undefined-Whether permission is granted; undefined until known.
openBleSetting()() => voidopenSettingsOpens the system settings for the app.
requestPermission()() => Promise<boolean>-Asks the user for Bluetooth permission.
statusBluetoothPermissionStatus-Current permission status.

useRuntimeEvent()

function useRuntimeEvent<K>(event, callback): void;

Listens for a runtime event for as long as the component is mounted.

Type Parameters

Type Parameter
K extends keyof RuntimeEventMap

Parameters

ParameterType
eventK
callback(value) => void

Returns

void


useScanControl()

function useScanControl(): object;

Exposes scan pause/resume to apps using BTProvider.

Returns

NameTypeDescription
canControlbooleanWhether a manager is available to control scanning.
pauseScan()() => voidPauses scanning.
resumeScan()() => voidResumes scanning.

Classes

A606CommandSequencer

Decides what to send a device, and when.

These protocols are self-clocking: the device answers a request, and the answer is what says which request comes next. A file read walks its offsets that way, and an identity check gates everything after it on the reply to the first command. Neither can be expressed by re-sending one fixed frame, which is all the SDK could do before.

At most one command is outstanding at a time. The transport serialises writes, so an implementation may assume the frame it is answering is the reply to the command it last returned.

Implements

Constructors

Constructor
new A606CommandSequencer(clockSync?): A606CommandSequencer;
Parameters
ParameterType
clockSync?ClockSyncOptions
Returns

A606CommandSequencer

Methods

initialCommands()
initialCommands(): readonly DeviceCommand[];

Sent once every characteristic is subscribed. Empty starts a device that only listens.

May resolve later, for a first command that depends on state read from storage.

Returns

readonly DeviceCommand[]

Implementation of

CommandSequencer.initialCommands

isHistoryTransfer()
isHistoryTransfer(): boolean;

True when accepted results are records downloaded from device history.

Returns

boolean

Implementation of

CommandSequencer.isHistoryTransfer

nextCommand()
nextCommand(frame): readonly DeviceCommand[] | undefined;

Answers one complete frame, with the characteristic it arrived on.

Returning undefined sends nothing, which is how a sequencer waits: an unidentified device is left alone rather than addressed with an opcode that may mean something else on the hardware actually present.

Parameters
ParameterType
framereadonly string[]
Returns

readonly DeviceCommand[] | undefined

Implementation of

CommandSequencer.nextCommand


A606Device

Viatom/Lepu ZH-SG-A606 meter, which uploads stored records after connection.

Extends

Accessors

readsHistoryOnRequest
Get Signature
get readsHistoryOnRequest(): boolean;

Whether the records the device stored are read only on syncHistory. Such a device goes live as soon as it connects; any other reads its stored records each time it connects.

Returns

boolean

Inherited from

BTManagedDevice.readsHistoryOnRequest

Constructors

Constructor
new A606Device(device, params): A606Device;
Parameters
ParameterType
deviceDevice
paramsCreateDeviceParams<ZH_SG_A606>
Returns

A606Device

Overrides

BTManagedDevice.constructor

Methods

connect()
connect(): Promise<void>;

Connects to the device and starts reading.

Resolves immediately if already connected and shares the pending promise while connecting.

Returns

Promise<void>

Throws

If the device has been destroyed.

Inherited from

BTManagedDevice.connect

destroy()
destroy(): void;

Stops the connection and data processing and clears the callbacks.

Returns

void

Inherited from

BTManagedDevice.destroy

disconnect()
disconnect(): Promise<void>;

Stops this device's subscriptions and closes its BLE connection.

Returns

Promise<void>

Inherited from

BTManagedDevice.disconnect

stopRecording()
stopRecording(): Promise<void>;

Stops a recording the device holds open; only recorders that report one support it.

Returns

Promise<void>

Inherited from

BTManagedDevice.stopRecording

syncHistory()
syncHistory(): Promise<void>;

Reads the records the device stored: over the open connection, or once it next connects.

Returns

Promise<void>

Inherited from

BTManagedDevice.syncHistory

Properties

PropertyModifierTypeDescriptionInherited from
devicepublic readonlyDeviceThe underlying BLE device.BTManagedDevice.device
deviceDatapublicDeviceDataIdentity and capabilities of this device, updated as device information is read.BTManagedDevice.deviceData
idpublicstringPlatform identifier of the underlying BLE device.BTManagedDevice.id
onConnectionEvent?public(data) => voidCalled for connection lifecycle events such as connected, bonded or history download.BTManagedDevice.onConnectionEvent
onDeviceDisconnected?public() => voidCalled when the device disconnects.BTManagedDevice.onDeviceDisconnected
onDeviceStatusChanged?public(status, measurementTypeKey?) => voidCalled when the connection status changes.BTManagedDevice.onDeviceStatusChanged
onError?public(error) => voidCalled with a normalised error; cleared by destroy.BTManagedDevice.onError
onResult?public(data, delivered?) => voidCalled with each measurement that passes the result policy; cleared by destroy. delivered is called once the app took it: the promise its result callback returned resolved.BTManagedDevice.onResult
onWaveform?public(waveform) => voidCalled with the ECG samples of each realtime answer while a recorder records; for display only.BTManagedDevice.onWaveform

A606FrameReader

Reads the & C/D ... checksum frames used by Viatom's ZH-SG glucose protocol.

Implements

  • FrameReader

Constructors

Constructor
new A606FrameReader(): A606FrameReader;
Returns

A606FrameReader

Methods

readFrame()
readFrame(buffer): FrameReadResult;

Extracts the next complete frame from the notification buffer.

Parameters
ParameterType
bufferreadonly string[]
Returns

FrameReadResult

Implementation of

FrameReader.readFrame


Aoj20aDevice

AOJ-20A driver with clock sync, offline history and named device errors.

Extends

Accessors

readsHistoryOnRequest
Get Signature
get readsHistoryOnRequest(): boolean;

Whether the records the device stored are read only on syncHistory. Such a device goes live as soon as it connects; any other reads its stored records each time it connects.

Returns

boolean

Inherited from

BTManagedDevice.readsHistoryOnRequest

Constructors

Constructor
new Aoj20aDevice(device, params): Aoj20aDevice;
Parameters
ParameterType
deviceDevice
paramsCreateDeviceParams<AOJ20A>
Returns

Aoj20aDevice

Overrides

BTManagedDevice.constructor

Methods

connect()
connect(): Promise<void>;

Connects to the device and starts reading.

Resolves immediately if already connected and shares the pending promise while connecting.

Returns

Promise<void>

Throws

If the device has been destroyed.

Inherited from

BTManagedDevice.connect

destroy()
destroy(): void;

Stops the connection and data processing and clears the callbacks.

Returns

void

Inherited from

BTManagedDevice.destroy

disconnect()
disconnect(): Promise<void>;

Stops this device's subscriptions and closes its BLE connection.

Returns

Promise<void>

Inherited from

BTManagedDevice.disconnect

stopRecording()
stopRecording(): Promise<void>;

Stops a recording the device holds open; only recorders that report one support it.

Returns

Promise<void>

Inherited from

BTManagedDevice.stopRecording

syncHistory()
syncHistory(): Promise<void>;

Reads the records the device stored: over the open connection, or once it next connects.

Returns

Promise<void>

Inherited from

BTManagedDevice.syncHistory

Properties

PropertyModifierTypeDescriptionInherited from
devicepublic readonlyDeviceThe underlying BLE device.BTManagedDevice.device
deviceDatapublicDeviceDataIdentity and capabilities of this device, updated as device information is read.BTManagedDevice.deviceData
idpublicstringPlatform identifier of the underlying BLE device.BTManagedDevice.id
onConnectionEvent?public(data) => voidCalled for connection lifecycle events such as connected, bonded or history download.BTManagedDevice.onConnectionEvent
onDeviceDisconnected?public() => voidCalled when the device disconnects.BTManagedDevice.onDeviceDisconnected
onDeviceStatusChanged?public(status, measurementTypeKey?) => voidCalled when the connection status changes.BTManagedDevice.onDeviceStatusChanged
onError?public(error) => voidCalled with a normalised error; cleared by destroy.BTManagedDevice.onError
onResult?public(data, delivered?) => voidCalled with each measurement that passes the result policy; cleared by destroy. delivered is called once the app took it: the promise its result callback returned resolved.BTManagedDevice.onResult
onWaveform?public(waveform) => voidCalled with the ECG samples of each realtime answer while a recorder records; for display only.BTManagedDevice.onWaveform

AojCommandSequencer

Walks AOJ's clock, metadata, history and optional clear exchange.

Implements

Constructors

Constructor
new AojCommandSequencer(params): AojCommandSequencer;
Parameters
ParameterType
paramsAojCommandSequencerParams
Returns

AojCommandSequencer

Methods

commandProgress()
commandProgress(frame): "ignored" | "partial" | "complete";

Describes whether a frame is ignored, partial, or completes the outstanding command.

Parameters
ParameterType
framereadonly string[]
Returns

"ignored" | "partial" | "complete"

Implementation of

CommandSequencer.commandProgress

initialCommands()
initialCommands(): readonly DeviceCommand[];

Sent once every characteristic is subscribed. Empty starts a device that only listens.

May resolve later, for a first command that depends on state read from storage.

Returns

readonly DeviceCommand[]

Implementation of

CommandSequencer.initialCommands

isHistoryTransfer()
isHistoryTransfer(): boolean;

True when accepted results are records downloaded from device history.

Returns

boolean

Implementation of

CommandSequencer.isHistoryTransfer

nextCommand()
nextCommand(frame): readonly DeviceCommand[] | undefined;

Answers one complete frame, with the characteristic it arrived on.

Returning undefined sends nothing, which is how a sequencer waits: an unidentified device is left alone rather than addressed with an opcode that may mean something else on the hardware actually present.

Parameters
ParameterType
framereadonly string[]
Returns

readonly DeviceCommand[] | undefined

Implementation of

CommandSequencer.nextCommand


AojFrameReader

Reads AOJ's aa 01 command length payload xor notifications.

Implements

  • FrameReader

Constructors

Constructor
new AojFrameReader(): AojFrameReader;
Returns

AojFrameReader

Methods

readFrame()
readFrame(buffer): FrameReadResult;

Extracts the next complete frame from the notification buffer.

Parameters
ParameterType
bufferreadonly string[]
Returns

FrameReadResult

Implementation of

FrameReader.readFrame


BackgroundSyncCoordinator

Queues results for the signed-in account and delivers them, retrying failed deliveries.

Type Parameters

Type Parameter
T extends DeviceKey

Constructors

Constructor
new BackgroundSyncCoordinator<T>(options): BackgroundSyncCoordinator<T>;
Parameters
ParameterType
optionsCoordinatorOptions<T>
Returns

BackgroundSyncCoordinator<T>

Methods

enqueue()
enqueue(result): Promise<void>;

Queues a result for the current account and tries to deliver the queue.

Parameters
ParameterType
resultResultCallback<T>
Returns

Promise<void>

flush()
flush(options?): Promise<void>;

Tries to deliver the queued results; resolves once the attempt is done.

Parameters
ParameterType
options?BackgroundSyncFlushOptions
Returns

Promise<void>

getQueued()
getQueued(): readonly BackgroundSyncResult<T>[];

The current account's results still waiting to be accepted, oldest first: readings to show as not saved yet. Kept up to date by every enqueue and flush; subscribe reads the stored queue in first.

Returns

readonly BackgroundSyncResult<T>[]

subscribe()
subscribe(listener): () => void;

Calls listener whenever the waiting results change; the first subscriber reads the stored queue in.

Parameters
ParameterType
listener() => void
Returns

() => void

updateOptions()
updateOptions(options): void;

Replaces the coordinator options.

Parameters
ParameterType
optionsCoordinatorOptions<T>
Returns

void


BloodGlucoseDevice

Decodes the legacy TaiDoc, GlucoCheck Gold and TeleBGM glucose protocols.

Extends

Accessors

readsHistoryOnRequest
Get Signature
get readsHistoryOnRequest(): boolean;

Whether the records the device stored are read only on syncHistory. Such a device goes live as soon as it connects; any other reads its stored records each time it connects.

Returns

boolean

Inherited from

BTManagedDevice.readsHistoryOnRequest

Constructors

Constructor
new BloodGlucoseDevice(device, params): BloodGlucoseDevice;
Parameters
ParameterType
deviceDevice
paramsCreateDeviceParams<GlucoseDevice>
Returns

BloodGlucoseDevice

Overrides

BTManagedDevice.constructor

Methods

connect()
connect(): Promise<void>;

Connects to the device and starts reading.

Resolves immediately if already connected and shares the pending promise while connecting.

Returns

Promise<void>

Throws

If the device has been destroyed.

Inherited from

BTManagedDevice.connect

destroy()
destroy(): void;

Stops the connection and data processing and clears the callbacks.

Returns

void

Inherited from

BTManagedDevice.destroy

disconnect()
disconnect(): Promise<void>;

Stops this device's subscriptions and closes its BLE connection.

Returns

Promise<void>

Inherited from

BTManagedDevice.disconnect

stopRecording()
stopRecording(): Promise<void>;

Stops a recording the device holds open; only recorders that report one support it.

Returns

Promise<void>

Inherited from

BTManagedDevice.stopRecording

syncHistory()
syncHistory(): Promise<void>;

Reads the records the device stored: over the open connection, or once it next connects.

Returns

Promise<void>

Inherited from

BTManagedDevice.syncHistory

Properties

PropertyModifierTypeDescriptionInherited from
devicepublic readonlyDeviceThe underlying BLE device.BTManagedDevice.device
deviceDatapublicDeviceDataIdentity and capabilities of this device, updated as device information is read.BTManagedDevice.deviceData
idpublicstringPlatform identifier of the underlying BLE device.BTManagedDevice.id
onConnectionEvent?public(data) => voidCalled for connection lifecycle events such as connected, bonded or history download.BTManagedDevice.onConnectionEvent
onDeviceDisconnected?public() => voidCalled when the device disconnects.BTManagedDevice.onDeviceDisconnected
onDeviceStatusChanged?public(status, measurementTypeKey?) => voidCalled when the connection status changes.BTManagedDevice.onDeviceStatusChanged
onError?public(error) => voidCalled with a normalised error; cleared by destroy.BTManagedDevice.onError
onResult?public(data, delivered?) => voidCalled with each measurement that passes the result policy; cleared by destroy. delivered is called once the app took it: the promise its result callback returned resolved.BTManagedDevice.onResult
onWaveform?public(waveform) => voidCalled with the ECG samples of each realtime answer while a recorder records; for display only.BTManagedDevice.onWaveform

BluetoothError

Error carrying a stable code and an optional translation key.

Extends

  • Error

Constructors

Constructor
new BluetoothError(
   code,
   message,
   translationKey?,
   originalError?
): BluetoothError;
Parameters
ParameterTypeDescription
codeBluetoothErrorCodeStable machine-readable failure code.
messagestring-
translationKey?stringTranslation key, when the message is one.
originalError?unknownUnderlying error this one was created from.
Returns

BluetoothError

Overrides

Error.constructor

Properties

PropertyModifierTypeDefault valueDescriptionOverrides
codepublic readonlyBluetoothErrorCodeundefinedStable machine-readable failure code.-
namepublic readonly"BluetoothError""BluetoothError"Always "BluetoothError".Error.name
originalError?public readonlyunknownundefinedUnderlying error this one was created from.-
translationKey?public readonlystringundefinedTranslation key, when the message is one.-

abstract BTManagedDevice

Base class for a Bluetooth device managed by the SDK: connects, subscribes, parses frames and reports results, status changes and connection events through its callbacks.

Extended by

Type Parameters

Type ParameterDefault type
T extends DeviceKeyBP2

Implements

Accessors

readsHistoryOnRequest
Get Signature
get readsHistoryOnRequest(): boolean;

Whether the records the device stored are read only on syncHistory. Such a device goes live as soon as it connects; any other reads its stored records each time it connects.

Returns

boolean

Constructors

Constructor
new BTManagedDevice<T>(device, __namedParameters): BTManagedDevice<T>;
Parameters
ParameterTypeDescription
deviceDeviceThe underlying BLE device.
__namedParametersCreateDeviceParams<T>-
Returns

BTManagedDevice<T>

Methods

connect()
connect(): Promise<void>;

Connects to the device and starts reading.

Resolves immediately if already connected and shares the pending promise while connecting.

Returns

Promise<void>

Throws

If the device has been destroyed.

Implementation of

IBTManagedDevice.connect

destroy()
destroy(): void;

Stops the connection and data processing and clears the callbacks.

Returns

void

disconnect()
disconnect(): Promise<void>;

Stops this device's subscriptions and closes its BLE connection.

Returns

Promise<void>

Implementation of

IBTManagedDevice.disconnect

stopRecording()
stopRecording(): Promise<void>;

Stops a recording the device holds open; only recorders that report one support it.

Returns

Promise<void>

syncHistory()
syncHistory(): Promise<void>;

Reads the records the device stored: over the open connection, or once it next connects.

Returns

Promise<void>

Properties

PropertyModifierTypeDescription
devicepublic readonlyDeviceThe underlying BLE device.
deviceDatapublicDeviceDataIdentity and capabilities of this device, updated as device information is read.
idpublicstringPlatform identifier of the underlying BLE device.
onConnectionEvent?public(data) => voidCalled for connection lifecycle events such as connected, bonded or history download.
onDeviceDisconnected?public() => voidCalled when the device disconnects.
onDeviceStatusChanged?public(status, measurementTypeKey?) => voidCalled when the connection status changes.
onError?public(error) => voidCalled with a normalised error; cleared by destroy.
onResult?public(data, delivered?) => voidCalled with each measurement that passes the result policy; cleared by destroy. delivered is called once the app took it: the promise its result callback returned resolved.
onWaveform?public(waveform) => voidCalled with the ECG samples of each realtime answer while a recorder records; for display only.

BTManager

Scans for, connects to and reports readings from the accepted Bluetooth devices.

Type Parameters

Type Parameter
T extends readonly AcceptedDevice[]

Constructors

Constructor
new BTManager<T>(
   bleManager,
   acceptedDevices,
   options?
): BTManager<T>;
Parameters
ParameterType
bleManagerBleManager
acceptedDevicesT
options?BTManagerOptions
Returns

BTManager<T>

Methods

destroy()
destroy(): void;

Stops scanning, disconnects devices and releases the manager.

Returns

void

disconnectDevice()
disconnectDevice(deviceId): Promise<void>;

Disconnects one device so it can be rediscovered by a later advertisement.

Parameters
ParameterType
deviceIdstring
Returns

Promise<void>

forget()
forget(deviceId): Promise<void>;

Disconnects one device and ignores later advertisements for this manager's lifetime.

Parameters
ParameterType
deviceIdstring
Returns

Promise<void>

getOpenSeries()
getOpenSeries(): readonly OpenSeries[];

The series being recorded, each with its latest values: what to show while a device streams.

Returns

readonly OpenSeries[]

keepConnecting()
keepConnecting(deviceIds): void;

On iOS, keeps a connection request pending for each device, so the system reconnects it when it advertises and the app can read it in the background without the advertisement carrying a service UUID. Use it for the devices the user has paired. Does nothing on other platforms.

A device that connects is handled like one the scan found, and its request is made again if it drops the link. Explicitly disconnecting, forgetting or stopping the scan ends the request.

Parameters
ParameterType
deviceIdsreadonly string[]
Returns

void

onConnectionEvent()
onConnectionEvent(callback?): void;

Sets the callback called for device connection events.

Parameters
ParameterType
callback?(data) => void
Returns

void

onDeviceFound()
onDeviceFound(callback?): void;

Sets the callback called with each newly discovered device.

Parameters
ParameterType
callback?(device, manager) => Promise<void>
Returns

void

onDeviceStatusChanged()
onDeviceStatusChanged(callback?): void;

Sets the callback called when a device's connection status changes.

Parameters
ParameterType
callback?(data) => void
Returns

void

onError()
onError(callback?): void;

Sets the callback called with Bluetooth errors.

Parameters
ParameterType
callback?(data) => void
Returns

void

onResult()
onResult(callback?): void;

Sets the callback called with each result; series that closed while nobody listened are delivered first. It may return a promise that resolves once the result is queued or saved: with recordCursorStorage set, the stored file the result came from (a Viatom ER1's or BP2's) is then not read again. A file whose promise rejects, or whose callback returns nothing, is read again on the next history sync.

Parameters
ParameterType
callback?(data) => void | Promise<unknown>
Returns

void

onWaveform()
onWaveform(callback?): void;

Sets the callback called with the live ECG samples of recording devices; for display, never saved.

Parameters
ParameterType
callback?(waveform) => void
Returns

void

pauseScan()
pauseScan(): void;

Pauses discovery without tearing down devices or their callbacks.

Use this when an app temporarily stops scanning, for example while it is in the background but an already-connected device may still deliver a measurement.

Returns

void

restoreDevices()
restoreDevices(devices): void;

Treats already-known BLE devices as freshly discovered and clears their forgotten state.

Parameters
ParameterType
devicesreadonly Device[]
Returns

void

resumeScan()
resumeScan(): void;

Resumes discovery without clearing devices or callbacks.

Restarting unconditionally also recovers when an app stopped the underlying BLE scan directly while BTManager still believed it was active.

Returns

void

setAutoConnect()
setAutoConnect(
   enabledOrOptions,
   delayMs?,
   onDeviceSelectionRequired?
): void;

Enables or disables automatic connection, either with positional arguments or an options object.

Parameters
ParameterType
enabledOrOptions| boolean | { delayMs?: number; enabled: boolean; onDeviceSelectionRequired?: (selection) => void; }
delayMs?number
onDeviceSelectionRequired?(selection) => void
Returns

void

setBackgroundScanEnabled()
setBackgroundScanEnabled(enabled): void;

Switches only the scan policy; the app can keep a foreground scan broad.

Parameters
ParameterType
enabledboolean
Returns

void

startScan()
startScan(): void;

Starts scanning once the Bluetooth adapter is powered on; does nothing while a scan is running.

Returns

void

stopRecording()
stopRecording(deviceId): Promise<void>;

Stops the recording a connected recorder holds open, for instance once the user confirms it after a recording event with leadOff. Rejects when the device is not connected or holds no recording.

Parameters
ParameterType
deviceIdstring
Returns

Promise<void>

stopScan()
stopScan(): void;

Stops scanning, disconnects the devices and clears the callbacks.

Returns

void

subscribeOpenSeries()
subscribeOpenSeries(listener): () => void;

Calls listener whenever a series gets a value or closes; returns the unsubscribe.

Parameters
ParameterType
listener() => void
Returns

() => void


CheckmeFrameReader

Handles split notifications, concatenated notifications, and both vendor envelopes.

Implements

  • FrameReader

Constructors

Constructor
new CheckmeFrameReader(): CheckmeFrameReader;
Returns

CheckmeFrameReader

Methods

readFrame()
readFrame(buffer): FrameReadResult;

Extracts the next complete frame from the notification buffer.

Parameters
ParameterType
bufferreadonly string[]
Returns

FrameReadResult

Implementation of

FrameReader.readFrame


CheckmePodDevice

Checkme Pod and Checkme Pod-WPS's realtime protocol from ViHealth.

Extends

Accessors

readsHistoryOnRequest
Get Signature
get readsHistoryOnRequest(): boolean;

Whether the records the device stored are read only on syncHistory. Such a device goes live as soon as it connects; any other reads its stored records each time it connects.

Returns

boolean

Inherited from

BTManagedDevice.readsHistoryOnRequest

Constructors

Constructor
new CheckmePodDevice(device, params): CheckmePodDevice;
Parameters
ParameterType
deviceDevice
paramsCreateDeviceParams<CHECKME_POD>
Returns

CheckmePodDevice

Overrides

BTManagedDevice.constructor

Methods

connect()
connect(): Promise<void>;

Connects to the device and starts reading.

Resolves immediately if already connected and shares the pending promise while connecting.

Returns

Promise<void>

Throws

If the device has been destroyed.

Inherited from

BTManagedDevice.connect

destroy()
destroy(): void;

Stops the connection and data processing and clears the callbacks.

Returns

void

Inherited from

BTManagedDevice.destroy

disconnect()
disconnect(): Promise<void>;

Stops this device's subscriptions and closes its BLE connection.

Returns

Promise<void>

Inherited from

BTManagedDevice.disconnect

stopRecording()
stopRecording(): Promise<void>;

Stops a recording the device holds open; only recorders that report one support it.

Returns

Promise<void>

Inherited from

BTManagedDevice.stopRecording

syncHistory()
syncHistory(): Promise<void>;

Reads the records the device stored: over the open connection, or once it next connects.

Returns

Promise<void>

Inherited from

BTManagedDevice.syncHistory

Properties

PropertyModifierTypeDescriptionInherited from
devicepublic readonlyDeviceThe underlying BLE device.BTManagedDevice.device
deviceDatapublicDeviceDataIdentity and capabilities of this device, updated as device information is read.BTManagedDevice.deviceData
idpublicstringPlatform identifier of the underlying BLE device.BTManagedDevice.id
onConnectionEvent?public(data) => voidCalled for connection lifecycle events such as connected, bonded or history download.BTManagedDevice.onConnectionEvent
onDeviceDisconnected?public() => voidCalled when the device disconnects.BTManagedDevice.onDeviceDisconnected
onDeviceStatusChanged?public(status, measurementTypeKey?) => voidCalled when the connection status changes.BTManagedDevice.onDeviceStatusChanged
onError?public(error) => voidCalled with a normalised error; cleared by destroy.BTManagedDevice.onError
onResult?public(data, delivered?) => voidCalled with each measurement that passes the result policy; cleared by destroy. delivered is called once the app took it: the promise its result callback returned resolved.BTManagedDevice.onResult
onWaveform?public(waveform) => voidCalled with the ECG samples of each realtime answer while a recorder records; for display only.BTManagedDevice.onWaveform

CheckmePodFrameReader

Reads split and concatenated Checkme Pod notifications with CRC validation.

Implements

  • FrameReader

Constructors

Constructor
new CheckmePodFrameReader(): CheckmePodFrameReader;
Returns

CheckmePodFrameReader

Methods

readFrame()
readFrame(buffer): FrameReadResult;

Extracts the next CRC-valid frame from the notification buffer.

Parameters
ParameterType
bufferreadonly string[]
Returns

FrameReadResult

Implementation of

FrameReader.readFrame


CheckmePodSequencer

Drives the info -> clock sync -> realtime exchange used by Checkme Pod.

Implements

Constructors

Constructor
new CheckmePodSequencer(params): CheckmePodSequencer;
Parameters
ParameterType
paramsCheckmePodSequencerParams
Returns

CheckmePodSequencer

Methods

initialCommands()
initialCommands(): readonly DeviceCommand[];

Sent once every characteristic is subscribed. Empty starts a device that only listens.

May resolve later, for a first command that depends on state read from storage.

Returns

readonly DeviceCommand[]

Implementation of

CommandSequencer.initialCommands

nextCommand()
nextCommand(frame): readonly DeviceCommand[] | undefined;

Answers one complete frame, with the characteristic it arrived on.

Returning undefined sends nothing, which is how a sequencer waits: an unidentified device is left alone rather than addressed with an opcode that may mean something else on the hardware actually present.

Parameters
ParameterType
framereadonly string[]
Returns

readonly DeviceCommand[] | undefined

Implementation of

CommandSequencer.nextCommand


CheckmeProDevice

Viatom Checkme Pro history transfer, matching the CheckmeBleInterface in ViHealth.

Extends

Accessors

readsHistoryOnRequest
Get Signature
get readsHistoryOnRequest(): boolean;

Whether the records the device stored are read only on syncHistory. Such a device goes live as soon as it connects; any other reads its stored records each time it connects.

Returns

boolean

Inherited from

BTManagedDevice.readsHistoryOnRequest

Constructors

Constructor
new CheckmeProDevice(device, params): CheckmeProDevice;
Parameters
ParameterType
deviceDevice
paramsCreateDeviceParams<CHECKME>
Returns

CheckmeProDevice

Overrides

BTManagedDevice.constructor

Methods

connect()
connect(): Promise<void>;

Connects to the device and starts reading.

Resolves immediately if already connected and shares the pending promise while connecting.

Returns

Promise<void>

Throws

If the device has been destroyed.

Inherited from

BTManagedDevice.connect

destroy()
destroy(): void;

Stops the connection and data processing and clears the callbacks.

Returns

void

Inherited from

BTManagedDevice.destroy

disconnect()
disconnect(): Promise<void>;

Stops this device's subscriptions and closes its BLE connection.

Returns

Promise<void>

Inherited from

BTManagedDevice.disconnect

stopRecording()
stopRecording(): Promise<void>;

Stops a recording the device holds open; only recorders that report one support it.

Returns

Promise<void>

Inherited from

BTManagedDevice.stopRecording

syncHistory()
syncHistory(): Promise<void>;

Reads the records the device stored: over the open connection, or once it next connects.

Returns

Promise<void>

Inherited from

BTManagedDevice.syncHistory

Properties

PropertyModifierTypeDescriptionInherited from
devicepublic readonlyDeviceThe underlying BLE device.BTManagedDevice.device
deviceDatapublicDeviceDataIdentity and capabilities of this device, updated as device information is read.BTManagedDevice.deviceData
idpublicstringPlatform identifier of the underlying BLE device.BTManagedDevice.id
onConnectionEvent?public(data) => voidCalled for connection lifecycle events such as connected, bonded or history download.BTManagedDevice.onConnectionEvent
onDeviceDisconnected?public() => voidCalled when the device disconnects.BTManagedDevice.onDeviceDisconnected
onDeviceStatusChanged?public(status, measurementTypeKey?) => voidCalled when the connection status changes.BTManagedDevice.onDeviceStatusChanged
onError?public(error) => voidCalled with a normalised error; cleared by destroy.BTManagedDevice.onError
onResult?public(data, delivered?) => voidCalled with each measurement that passes the result policy; cleared by destroy. delivered is called once the app took it: the promise its result callback returned resolved.BTManagedDevice.onResult
onWaveform?public(waveform) => voidCalled with the ECG samples of each realtime answer while a recorder records; for display only.BTManagedDevice.onWaveform

CheckmeProSequencer

Downloads Checkme Pro history using the command exchange in ViHealth's CheckmeBleInterface. The device returns list records first; the daily list and ECG list then point to waveform files, which are read with the same offset-based transfer.

Implements

Constructors

Constructor
new CheckmeProSequencer(params): CheckmeProSequencer;
Parameters
ParameterType
paramsCheckmeTransferParams
Returns

CheckmeProSequencer

Methods

commandTimeoutMs()
commandTimeoutMs(): number | undefined;

The response timeout for the currently outstanding command, when a protocol needs one.

Returns

number | undefined

Implementation of

CommandSequencer.commandTimeoutMs

initialCommands()
initialCommands(): readonly DeviceCommand[];

Sent once every characteristic is subscribed. Empty starts a device that only listens.

May resolve later, for a first command that depends on state read from storage.

Returns

readonly DeviceCommand[]

Implementation of

CommandSequencer.initialCommands

isHistoryTransfer()
isHistoryTransfer(): boolean;

True when accepted results are records downloaded from device history.

Returns

boolean

Implementation of

CommandSequencer.isHistoryTransfer

isNormalDisconnect()
isNormalDisconnect(): boolean;

True when a timeout-style disconnect is the device's normal completion signal.

Returns

boolean

Implementation of

CommandSequencer.isNormalDisconnect

nextCommand()
nextCommand(frame): readonly DeviceCommand[] | undefined;

Answers one complete frame, with the characteristic it arrived on.

Returning undefined sends nothing, which is how a sequencer waits: an unidentified device is left alone rather than addressed with an opcode that may mean something else on the hardware actually present.

Parameters
ParameterType
framereadonly string[]
Returns

readonly DeviceCommand[] | undefined

Implementation of

CommandSequencer.nextCommand

onCommandTimeout()
onCommandTimeout(): CommandTimeoutResult;

Re-sends the current command or ends the exchange after a response timeout.

Returns

CommandTimeoutResult

Implementation of

CommandSequencer.onCommandTimeout


CustomDevice

Runs a device registered with defineCustomDevice.

Everything specific to the device is data: the services and characteristics it exposes, how a complete frame is recognised, which frame carries which reading, and how each byte range becomes a number. What is left here is the safety net - a reading is reported only when every property the declaration named decoded to a finite number inside the range the catalog accepts. Anything else is reported through onError and no measurement is emitted.

Extends

Extended by

Accessors

readsHistoryOnRequest
Get Signature
get readsHistoryOnRequest(): boolean;

A Lepu device that polls live keeps its stored files until asked; without polling it reads them on connect.

Returns

boolean

Overrides

BTManagedDevice.readsHistoryOnRequest

Constructors

Constructor
new CustomDevice(
   device,
   params,
   definition
): CustomDevice;
Parameters
ParameterType
deviceDevice
paramsCreateDeviceParams<CustomDeviceId>
definitionCustomDeviceDefinition
Returns

CustomDevice

Overrides

BTManagedDevice.constructor

Methods

connect()
connect(): Promise<void>;

Connects to the device and starts reading.

Resolves immediately if already connected and shares the pending promise while connecting.

Returns

Promise<void>

Throws

If the device has been destroyed.

Inherited from

BTManagedDevice.connect

destroy()
destroy(): void;

Stops the connection and data processing and clears the callbacks.

Returns

void

Inherited from

BTManagedDevice.destroy

disconnect()
disconnect(): Promise<void>;

Stops this device's subscriptions and closes its BLE connection.

Returns

Promise<void>

Inherited from

BTManagedDevice.disconnect

stopRecording()
stopRecording(): Promise<void>;

Stops the open recording; the device stores it when it is long enough, and the files are then read.

Returns

Promise<void>

Overrides

BTManagedDevice.stopRecording

syncHistory()
syncHistory(): Promise<void>;

Reads the records the device stored: over the open connection, or once it next connects.

Returns

Promise<void>

Inherited from

BTManagedDevice.syncHistory

Properties

PropertyModifierTypeDescriptionInherited from
devicepublic readonlyDeviceThe underlying BLE device.BTManagedDevice.device
deviceDatapublicDeviceDataIdentity and capabilities of this device, updated as device information is read.BTManagedDevice.deviceData
idpublicstringPlatform identifier of the underlying BLE device.BTManagedDevice.id
onConnectionEvent?public(data) => voidCalled for connection lifecycle events such as connected, bonded or history download.BTManagedDevice.onConnectionEvent
onDeviceDisconnected?public() => voidCalled when the device disconnects.BTManagedDevice.onDeviceDisconnected
onDeviceStatusChanged?public(status, measurementTypeKey?) => voidCalled when the connection status changes.BTManagedDevice.onDeviceStatusChanged
onError?public(error) => voidCalled with a normalised error; cleared by destroy.BTManagedDevice.onError
onResult?public(data, delivered?) => voidCalled with each measurement that passes the result policy; cleared by destroy. delivered is called once the app took it: the promise its result callback returned resolved.BTManagedDevice.onResult
onWaveform?public(waveform) => voidCalled with the ECG samples of each realtime answer while a recorder records; for display only.BTManagedDevice.onWaveform

DeviceSelectionRequiredError

Thrown when several devices match and none was selected.

Extends

  • Error

Constructors

Constructor
new DeviceSelectionRequiredError(model, ids): DeviceSelectionRequiredError;
Parameters
ParameterType
modelstring
idsreadonly string[]
Returns

DeviceSelectionRequiredError

Overrides

Error.constructor


GenialT31CommandSequencer

Answers Genial's handshake, clock request, temperature and error frames.

Implements

Constructors

Constructor
new GenialT31CommandSequencer(now?): GenialT31CommandSequencer;
Parameters
ParameterType
now?() => Date
Returns

GenialT31CommandSequencer

Methods

initialCommands()
initialCommands(): readonly DeviceCommand[];

Sent once every characteristic is subscribed. Empty starts a device that only listens.

May resolve later, for a first command that depends on state read from storage.

Returns

readonly DeviceCommand[]

Implementation of

CommandSequencer.initialCommands

nextCommand()
nextCommand(frame): readonly DeviceCommand[] | undefined;

Answers one complete frame, with the characteristic it arrived on.

Returning undefined sends nothing, which is how a sequencer waits: an unidentified device is left alone rather than addressed with an opcode that may mean something else on the hardware actually present.

Parameters
ParameterType
framereadonly string[]
Returns

readonly DeviceCommand[] | undefined

Implementation of

CommandSequencer.nextCommand


GenialT31Device

Genial T31 Bluetooth thermometer, as used by the ViHealth app.

Extends

Accessors

readsHistoryOnRequest
Get Signature
get readsHistoryOnRequest(): boolean;

Whether the records the device stored are read only on syncHistory. Such a device goes live as soon as it connects; any other reads its stored records each time it connects.

Returns

boolean

Inherited from

BTManagedDevice.readsHistoryOnRequest

Constructors

Constructor
new GenialT31Device(device, params): GenialT31Device;
Parameters
ParameterType
deviceDevice
paramsCreateDeviceParams<GENIAL_T31>
Returns

GenialT31Device

Overrides

BTManagedDevice.constructor

Methods

connect()
connect(): Promise<void>;

Connects to the device and starts reading.

Resolves immediately if already connected and shares the pending promise while connecting.

Returns

Promise<void>

Throws

If the device has been destroyed.

Inherited from

BTManagedDevice.connect

destroy()
destroy(): void;

Stops the connection and data processing and clears the callbacks.

Returns

void

Inherited from

BTManagedDevice.destroy

disconnect()
disconnect(): Promise<void>;

Stops this device's subscriptions and closes its BLE connection.

Returns

Promise<void>

Inherited from

BTManagedDevice.disconnect

stopRecording()
stopRecording(): Promise<void>;

Stops a recording the device holds open; only recorders that report one support it.

Returns

Promise<void>

Inherited from

BTManagedDevice.stopRecording

syncHistory()
syncHistory(): Promise<void>;

Reads the records the device stored: over the open connection, or once it next connects.

Returns

Promise<void>

Inherited from

BTManagedDevice.syncHistory

Properties

PropertyModifierTypeDescriptionInherited from
devicepublic readonlyDeviceThe underlying BLE device.BTManagedDevice.device
deviceDatapublicDeviceDataIdentity and capabilities of this device, updated as device information is read.BTManagedDevice.deviceData
idpublicstringPlatform identifier of the underlying BLE device.BTManagedDevice.id
onConnectionEvent?public(data) => voidCalled for connection lifecycle events such as connected, bonded or history download.BTManagedDevice.onConnectionEvent
onDeviceDisconnected?public() => voidCalled when the device disconnects.BTManagedDevice.onDeviceDisconnected
onDeviceStatusChanged?public(status, measurementTypeKey?) => voidCalled when the connection status changes.BTManagedDevice.onDeviceStatusChanged
onError?public(error) => voidCalled with a normalised error; cleared by destroy.BTManagedDevice.onError
onResult?public(data, delivered?) => voidCalled with each measurement that passes the result policy; cleared by destroy. delivered is called once the app took it: the promise its result callback returned resolved.BTManagedDevice.onResult
onWaveform?public(waveform) => voidCalled with the ECG samples of each realtime answer while a recorder records; for display only.BTManagedDevice.onWaveform

GenialT31FrameReader

Reads the A6 ... checksum 6A frames used by Genial T31 thermometers.

Implements

  • FrameReader

Constructors

Constructor
new GenialT31FrameReader(): GenialT31FrameReader;
Returns

GenialT31FrameReader

Methods

readFrame()
readFrame(buffer): FrameReadResult;

Extracts the next complete frame from the notification buffer.

Parameters
ParameterType
bufferreadonly string[]
Returns

FrameReadResult

Implementation of

FrameReader.readFrame


LepuFileTransfer

Downloads the records a Lepu device has stored.

Every opcode this uses is generic and inert - list, open, read, close - so unlike a realtime poll it is safe on hardware whose model is not known. That is what makes it the one thing the whole family can be asked for without identifying it first.

The exchange is self-clocking and has no windowing: each reply decides the next request, and the device chooses how much to send, so the offset advances by what actually arrived rather than by an assumed chunk size. There is no retry in the protocol either - a single dropped reply stalls the transfer with nothing to resume it - which is what the data processor's stuck-data timeout is the watchdog for.

A short read is an error, not a truncated success: the device is asked to close the file and the reading is discarded, because half an ECG that looks like a whole one is worse than none.

Implements

Constructors

Constructor
new LepuFileTransfer(params): LepuFileTransfer;
Parameters
ParameterType
paramsLepuFileTransferParams
Returns

LepuFileTransfer

Methods

initialCommands()
initialCommands(delayBeforeWriteMs?): readonly DeviceCommand[];

Sent once every characteristic is subscribed. Empty starts a device that only listens.

May resolve later, for a first command that depends on state read from storage.

Parameters
ParameterType
delayBeforeWriteMs?number
Returns

readonly DeviceCommand[]

Implementation of

CommandSequencer.initialCommands

isHistoryTransfer()
isHistoryTransfer(): boolean;

True when accepted results are records downloaded from device history.

Returns

boolean

Implementation of

CommandSequencer.isHistoryTransfer

nextCommand()
nextCommand(frame): readonly DeviceCommand[] | undefined;

Answers one complete frame, with the characteristic it arrived on.

Returning undefined sends nothing, which is how a sequencer waits: an unidentified device is left alone rather than addressed with an opcode that may mean something else on the hardware actually present.

Parameters
ParameterType
framereadonly string[]
Returns

readonly DeviceCommand[] | undefined

Implementation of

CommandSequencer.nextCommand


S9CommandSequencer

Runs only the SH09 commands verified on firmware image 1.

Implements

Constructors

Constructor
new S9CommandSequencer(params): S9CommandSequencer;
Parameters
ParameterType
paramsS9CommandSequencerParams
Returns

S9CommandSequencer

Methods

commandProgress()
commandProgress(frame): "ignored" | "partial" | "complete";

Describes whether a frame is ignored, partial, or completes the outstanding command.

Parameters
ParameterType
framereadonly string[]
Returns

"ignored" | "partial" | "complete"

Implementation of

CommandSequencer.commandProgress

commandTimeoutMs()
commandTimeoutMs(): number;

The response timeout for the currently outstanding command, when a protocol needs one.

Returns

number

Implementation of

CommandSequencer.commandTimeoutMs

initialCommands()
initialCommands(): readonly DeviceCommand[];

Sent once every characteristic is subscribed. Empty starts a device that only listens.

May resolve later, for a first command that depends on state read from storage.

Returns

readonly DeviceCommand[]

Implementation of

CommandSequencer.initialCommands

isHistoryTransfer()
isHistoryTransfer(): boolean;

True when accepted results are records downloaded from device history.

Returns

boolean

Implementation of

CommandSequencer.isHistoryTransfer

nextCommand()
nextCommand(frame): readonly DeviceCommand[] | undefined;

Answers one complete frame, with the characteristic it arrived on.

Returning undefined sends nothing, which is how a sequencer waits: an unidentified device is left alone rather than addressed with an opcode that may mean something else on the hardware actually present.

Parameters
ParameterType
framereadonly string[]
Returns

readonly DeviceCommand[] | undefined

Implementation of

CommandSequencer.nextCommand

onCommandTimeout()
onCommandTimeout(): CommandTimeoutResult;

Re-sends the current command or ends the exchange after a response timeout.

Returns

CommandTimeoutResult

Implementation of

CommandSequencer.onCommandTimeout


S9FrameReader

SH09 notifications are fixed-width, zero-padded 20-byte replies.

Implements

  • FrameReader

Constructors

Constructor
new S9FrameReader(): S9FrameReader;
Returns

S9FrameReader

Methods

readFrame()
readFrame(buffer): FrameReadResult;

Returns the next fixed-width frame in the buffer.

Parameters
ParameterType
bufferreadonly string[]
Returns

FrameReadResult

Implementation of

FrameReader.readFrame


TrasenseS9Device

Trasense SH09. Its address and advertisement data are sensitive and never logged.

Extends

Accessors

readsHistoryOnRequest
Get Signature
get readsHistoryOnRequest(): boolean;

Whether the records the device stored are read only on syncHistory. Such a device goes live as soon as it connects; any other reads its stored records each time it connects.

Returns

boolean

Inherited from

BTManagedDevice.readsHistoryOnRequest

Constructors

Constructor
new TrasenseS9Device(device, params): TrasenseS9Device;
Parameters
ParameterType
deviceDevice
paramsCreateDeviceParams<TRASENSE_S9>
Returns

TrasenseS9Device

Overrides

BTManagedDevice.constructor

Methods

connect()
connect(): Promise<void>;

Connects to the device and starts reading.

Resolves immediately if already connected and shares the pending promise while connecting.

Returns

Promise<void>

Throws

If the device has been destroyed.

Inherited from

BTManagedDevice.connect

destroy()
destroy(): void;

Stops the connection and data processing and clears the callbacks.

Returns

void

Inherited from

BTManagedDevice.destroy

disconnect()
disconnect(): Promise<void>;

Stops this device's subscriptions and closes its BLE connection.

Returns

Promise<void>

Inherited from

BTManagedDevice.disconnect

stopRecording()
stopRecording(): Promise<void>;

Stops a recording the device holds open; only recorders that report one support it.

Returns

Promise<void>

Inherited from

BTManagedDevice.stopRecording

syncHistory()
syncHistory(): Promise<void>;

Reads the records the device stored: over the open connection, or once it next connects.

Returns

Promise<void>

Inherited from

BTManagedDevice.syncHistory

Properties

PropertyModifierTypeDescriptionInherited from
devicepublic readonlyDeviceThe underlying BLE device.BTManagedDevice.device
deviceDatapublicDeviceDataIdentity and capabilities of this device, updated as device information is read.BTManagedDevice.deviceData
idpublicstringPlatform identifier of the underlying BLE device.BTManagedDevice.id
onConnectionEvent?public(data) => voidCalled for connection lifecycle events such as connected, bonded or history download.BTManagedDevice.onConnectionEvent
onDeviceDisconnected?public() => voidCalled when the device disconnects.BTManagedDevice.onDeviceDisconnected
onDeviceStatusChanged?public(status, measurementTypeKey?) => voidCalled when the connection status changes.BTManagedDevice.onDeviceStatusChanged
onError?public(error) => voidCalled with a normalised error; cleared by destroy.BTManagedDevice.onError
onResult?public(data, delivered?) => voidCalled with each measurement that passes the result policy; cleared by destroy. delivered is called once the app took it: the promise its result callback returned resolved.BTManagedDevice.onResult
onWaveform?public(waveform) => voidCalled with the ECG samples of each realtime answer while a recorder records; for display only.BTManagedDevice.onWaveform

VerovalActivityDevice

HARTMANN's Veroval Activity wristband, including stored step and heart-rate history.

Extends

Accessors

readsHistoryOnRequest
Get Signature
get readsHistoryOnRequest(): boolean;

Whether the records the device stored are read only on syncHistory. Such a device goes live as soon as it connects; any other reads its stored records each time it connects.

Returns

boolean

Inherited from

BTManagedDevice.readsHistoryOnRequest

Constructors

Constructor
new VerovalActivityDevice(device, params): VerovalActivityDevice;
Parameters
ParameterType
deviceDevice
paramsCreateDeviceParams<VEROVAL_ACTIVITY>
Returns

VerovalActivityDevice

Overrides

BTManagedDevice.constructor

Methods

connect()
connect(): Promise<void>;

Connects to the device and starts reading.

Resolves immediately if already connected and shares the pending promise while connecting.

Returns

Promise<void>

Throws

If the device has been destroyed.

Inherited from

BTManagedDevice.connect

destroy()
destroy(): void;

Stops the connection and data processing and clears the callbacks.

Returns

void

Inherited from

BTManagedDevice.destroy

disconnect()
disconnect(): Promise<void>;

Stops this device's subscriptions and closes its BLE connection.

Returns

Promise<void>

Inherited from

BTManagedDevice.disconnect

stopRecording()
stopRecording(): Promise<void>;

Stops a recording the device holds open; only recorders that report one support it.

Returns

Promise<void>

Inherited from

BTManagedDevice.stopRecording

syncHistory()
syncHistory(): Promise<void>;

Reads the records the device stored: over the open connection, or once it next connects.

Returns

Promise<void>

Inherited from

BTManagedDevice.syncHistory

Properties

PropertyModifierTypeDescriptionInherited from
devicepublic readonlyDeviceThe underlying BLE device.BTManagedDevice.device
deviceDatapublicDeviceDataIdentity and capabilities of this device, updated as device information is read.BTManagedDevice.deviceData
idpublicstringPlatform identifier of the underlying BLE device.BTManagedDevice.id
onConnectionEvent?public(data) => voidCalled for connection lifecycle events such as connected, bonded or history download.BTManagedDevice.onConnectionEvent
onDeviceDisconnected?public() => voidCalled when the device disconnects.BTManagedDevice.onDeviceDisconnected
onDeviceStatusChanged?public(status, measurementTypeKey?) => voidCalled when the connection status changes.BTManagedDevice.onDeviceStatusChanged
onError?public(error) => voidCalled with a normalised error; cleared by destroy.BTManagedDevice.onError
onResult?public(data, delivered?) => voidCalled with each measurement that passes the result policy; cleared by destroy. delivered is called once the app took it: the promise its result callback returned resolved.BTManagedDevice.onResult
onWaveform?public(waveform) => voidCalled with the ECG samples of each realtime answer while a recorder records; for display only.BTManagedDevice.onWaveform

VerovalActivitySequencer

Drives the private history protocol used by the Veroval Activity wristband.

Implements

Constructors

Constructor
new VerovalActivitySequencer(params): VerovalActivitySequencer;
Parameters
ParameterType
paramsVerovalActivitySequencerParams
Returns

VerovalActivitySequencer

Methods

initialCommands()
initialCommands(): readonly DeviceCommand[];

Sent once every characteristic is subscribed. Empty starts a device that only listens.

May resolve later, for a first command that depends on state read from storage.

Returns

readonly DeviceCommand[]

Implementation of

CommandSequencer.initialCommands

nextCommand()
nextCommand(frame): readonly DeviceCommand[] | undefined;

Answers one complete frame, with the characteristic it arrived on.

Returning undefined sends nothing, which is how a sequencer waits: an unidentified device is left alone rather than addressed with an opcode that may mean something else on the hardware actually present.

Parameters
ParameterType
framereadonly string[]
Returns

readonly DeviceCommand[] | undefined

Implementation of

CommandSequencer.nextCommand


VerovalDuoControlDevice

The Veroval duo control.

A device class rather than a declaration, because reading it is a conversation: the two user memories are asked in turn, and the device answers with bare control bytes as often as with payload. The decoding is still declared - the class supplies the framing and the walk, and nothing else.

Readings are stored measurements, not live ones. The device hands over its history when asked, so what arrives was taken before the connection and may be days old.

Extends

Accessors

readsHistoryOnRequest
Get Signature
get readsHistoryOnRequest(): boolean;

A Lepu device that polls live keeps its stored files until asked; without polling it reads them on connect.

Returns

boolean

Inherited from

CustomDevice.readsHistoryOnRequest

Constructors

Constructor
new VerovalDuoControlDevice(device, params): VerovalDuoControlDevice;
Parameters
ParameterType
deviceDevice
paramsCreateDeviceParams<CustomDeviceId>
Returns

VerovalDuoControlDevice

Overrides

CustomDevice.constructor

Methods

connect()
connect(): Promise<void>;

Connects to the device and starts reading.

Resolves immediately if already connected and shares the pending promise while connecting.

Returns

Promise<void>

Throws

If the device has been destroyed.

Inherited from

CustomDevice.connect

destroy()
destroy(): void;

Stops the connection and data processing and clears the callbacks.

Returns

void

Inherited from

CustomDevice.destroy

disconnect()
disconnect(): Promise<void>;

Stops this device's subscriptions and closes its BLE connection.

Returns

Promise<void>

Inherited from

CustomDevice.disconnect

stopRecording()
stopRecording(): Promise<void>;

Stops the open recording; the device stores it when it is long enough, and the files are then read.

Returns

Promise<void>

Inherited from

CustomDevice.stopRecording

syncHistory()
syncHistory(): Promise<void>;

Reads the records the device stored: over the open connection, or once it next connects.

Returns

Promise<void>

Inherited from

CustomDevice.syncHistory

Properties

PropertyModifierTypeDescriptionInherited from
devicepublic readonlyDeviceThe underlying BLE device.CustomDevice.device
deviceDatapublicDeviceDataIdentity and capabilities of this device, updated as device information is read.CustomDevice.deviceData
idpublicstringPlatform identifier of the underlying BLE device.CustomDevice.id
onConnectionEvent?public(data) => voidCalled for connection lifecycle events such as connected, bonded or history download.CustomDevice.onConnectionEvent
onDeviceDisconnected?public() => voidCalled when the device disconnects.CustomDevice.onDeviceDisconnected
onDeviceStatusChanged?public(status, measurementTypeKey?) => voidCalled when the connection status changes.CustomDevice.onDeviceStatusChanged
onError?public(error) => voidCalled with a normalised error; cleared by destroy.CustomDevice.onError
onResult?public(data, delivered?) => voidCalled with each measurement that passes the result policy; cleared by destroy. delivered is called once the app took it: the promise its result callback returned resolved.CustomDevice.onResult
onWaveform?public(waveform) => voidCalled with the ECG samples of each realtime answer while a recorder records; for display only.CustomDevice.onWaveform

VerovalEcgDevice

The Veroval ECG.

Reading it is a download rather than a decode, so the whole recording is assembled before anything is reported: thirty-four seconds of samples at 128 Hz, two bytes each, converted to millivolts with the device's own calibration.

The vendor's app plots a thirty-second window of this with a baseline-wander filter applied. That is a display transform, not calibration, so it is deliberately not reproduced here - what is reported is what the device recorded.

Extends

Accessors

readsHistoryOnRequest
Get Signature
get readsHistoryOnRequest(): boolean;

Whether the records the device stored are read only on syncHistory. Such a device goes live as soon as it connects; any other reads its stored records each time it connects.

Returns

boolean

Inherited from

BTManagedDevice.readsHistoryOnRequest

Constructors

Constructor
new VerovalEcgDevice(device, params): VerovalEcgDevice;
Parameters
ParameterType
deviceDevice
paramsCreateDeviceParams<VEROVAL_ECG>
Returns

VerovalEcgDevice

Overrides

BTManagedDevice.constructor

Methods

connect()
connect(): Promise<void>;

Connects to the device and starts reading.

Resolves immediately if already connected and shares the pending promise while connecting.

Returns

Promise<void>

Throws

If the device has been destroyed.

Inherited from

BTManagedDevice.connect

destroy()
destroy(): void;

Stops the connection and data processing and clears the callbacks.

Returns

void

Inherited from

BTManagedDevice.destroy

disconnect()
disconnect(): Promise<void>;

Stops this device's subscriptions and closes its BLE connection.

Returns

Promise<void>

Inherited from

BTManagedDevice.disconnect

stopRecording()
stopRecording(): Promise<void>;

Stops a recording the device holds open; only recorders that report one support it.

Returns

Promise<void>

Inherited from

BTManagedDevice.stopRecording

syncHistory()
syncHistory(): Promise<void>;

Reads the records the device stored: over the open connection, or once it next connects.

Returns

Promise<void>

Inherited from

BTManagedDevice.syncHistory

Properties

PropertyModifierTypeDescriptionInherited from
devicepublic readonlyDeviceThe underlying BLE device.BTManagedDevice.device
deviceDatapublicDeviceDataIdentity and capabilities of this device, updated as device information is read.BTManagedDevice.deviceData
idpublicstringPlatform identifier of the underlying BLE device.BTManagedDevice.id
onConnectionEvent?public(data) => voidCalled for connection lifecycle events such as connected, bonded or history download.BTManagedDevice.onConnectionEvent
onDeviceDisconnected?public() => voidCalled when the device disconnects.BTManagedDevice.onDeviceDisconnected
onDeviceStatusChanged?public(status, measurementTypeKey?) => voidCalled when the connection status changes.BTManagedDevice.onDeviceStatusChanged
onError?public(error) => voidCalled with a normalised error; cleared by destroy.BTManagedDevice.onError
onResult?public(data, delivered?) => voidCalled with each measurement that passes the result policy; cleared by destroy. delivered is called once the app took it: the promise its result callback returned resolved.BTManagedDevice.onResult
onWaveform?public(waveform) => voidCalled with the ECG samples of each realtime answer while a recorder records; for display only.BTManagedDevice.onWaveform

Functions

aoj20aThermometer()

function aoj20aThermometer(params): CustomDeviceDefinition;

The AOJ-20A infrared thermometer.

Declared without a write characteristic, because the device sends its reading rather than waiting to be asked: the vendor app has a request for it, calls it from nowhere, and still displays temperatures - so the reply arrives when someone takes a measurement. Not writing also means not polling, which for a spot-check device would otherwise re-report the same reading for as long as the link stayed up.

Only the realtime reply is declared. The stored-history reply shares the header and would need its own case; nothing reads history yet, and a case that decoded it into the same measurement would post old readings as though they had just been taken.

Parameters

ParameterType
paramsAojDeviceParams

Returns

CustomDeviceDefinition


aojCommandByte()

function aojCommandByte(frame): number;

Reads the command byte of a frame.

Parameters

ParameterType
framereadonly string[]

Returns

number


bluetoothErrorCodeFor()

function bluetoothErrorCodeFor(error): BluetoothErrorCode;

Classifies any thrown value into a BluetoothErrorCode.

Parameters

ParameterType
errorunknown

Returns

BluetoothErrorCode


bosoMedicusMonitor()

function bosoMedicusMonitor(params): CustomDeviceDefinition;

Declares a boso medicus system monitor.

The monitor stores readings and sends them through the standard 0x1810/0x2A35 profile after pairing. The shared profile declaration handles mmHg, optional timestamps, pulse rate and the profile's user/status bytes without inventing a boso-specific wire format.

Parameters

ParameterType
paramsBosoMedicusParams

Returns

CustomDeviceDefinition


bp2aMonitor()

function bp2aMonitor(params): CustomDeviceDefinition;

BP2A, the arm-cuff monitor of the series.

Parameters

ParameterType
paramsViatomBpParams

Returns

CustomDeviceDefinition


bp2tMonitor()

function bp2tMonitor(params): CustomDeviceDefinition;

BP2T, documented by the vendor alongside BP2 and BP2A as the same protocol.

Parameters

ParameterType
paramsViatomBpParams

Returns

CustomDeviceDefinition


bp2vMonitor()

function bp2vMonitor(params): CustomDeviceDefinition;

BP2V, the WiFi variant that uses the BP2 realtime layout without ECG frames.

Parameters

ParameterType
paramsViatomBpParams

Returns

CustomDeviceDefinition


bp2wMonitor()

function bp2wMonitor(params): CustomDeviceDefinition;

BP2W. Documented in its own section, but decoding the same realtime struct.

Parameters

ParameterType
paramsViatomBpParams

Returns

CustomDeviceDefinition


bpu26Monitor()

function bpu26Monitor(params): CustomDeviceDefinition;

BPU 26, the Veroval compact+ upper-arm monitor.

Parameters

ParameterType
paramsVerovalBpParams

Returns

CustomDeviceDefinition


bpw26Monitor()

function bpw26Monitor(params): CustomDeviceDefinition;

BPW 26, the Veroval compact+ wrist monitor.

Parameters

ParameterType
paramsVerovalBpParams

Returns

CustomDeviceDefinition


btDeviceMatches()

function btDeviceMatches(device, filter): boolean;

Whether a runtime device is one filter asks for.

Parameters

ParameterType
deviceRuntimeDevice
filterBTDeviceFilter

Returns

boolean


buildA606ConnectedCommand()

function buildA606ConnectedCommand(): string[];

The vendor's post-connect command for the ZH-SG family.

Returns

string[]


buildA606TimeCommand()

function buildA606TimeCommand(now): string[];

Writes the local clock in the six-byte YY MM DD hh mm ss payload.

Parameters

ParameterType
nowDate

Returns

string[]


buildA606UploadCommand()

function buildA606UploadCommand(ack?): string[];

Requests the next stored record after the current one was accepted.

Parameters

ParameterTypeDefault value
ack?booleanfalse

Returns

string[]


buildAojFrame()

function buildAojFrame(command, payload?): string[];

Builds an AOJ frame for a command and payload, with its XOR checksum.

Parameters

ParameterTypeDefault value
commandnumberundefined
payload?readonly number[][]

Returns

string[]


buildGenialT31TimeCommand()

function buildGenialT31TimeCommand(now?): string[];

Builds the vendor's A6 05 37 weekday hour minute second checksum 6A clock frame.

Parameters

ParameterType
now?Date

Returns

string[]


checkmeCommand()

function checkmeCommand(command, payload?): string[];

Builds the frame for a command with an optional hex payload.

Parameters

ParameterTypeDefault value
commandnumberundefined
payload?readonly string[][]

Returns

string[]


checkmePodCommand()

function checkmePodCommand(
   command,
   payload?,
   sequence?
): string[];

Builds the AA command envelope used by Checkme Pod and Checkme Pod-WPS.

Parameters

ParameterTypeDefault value
commandnumberundefined
payload?readonly string[][]
sequence?number0

Returns

string[]


checkmePodSyncTime()

function checkmePodSyncTime(now?): string[];

Builds the frame that sets the device clock to the given time.

Parameters

ParameterType
now?Date

Returns

string[]


checkmeReadContent()

function checkmeReadContent(sequence): string[];

Builds the frame that requests the chunk with the given sequence number.

Parameters

ParameterType
sequencenumber

Returns

string[]


checkmeReadEnd()

function checkmeReadEnd(): string[];

Builds the frame that closes the open file.

Returns

string[]


checkmeReadFileStart()

function checkmeReadFileStart(name): string[];

Builds the frame that opens the named file for reading.

Parameters

ParameterType
namestring

Returns

string[]


clockSyncCapabilityForDevice()

function clockSyncCapabilityForDevice(deviceName): ClockSyncCapability;

Built-in capability declarations; custom declarations provide their own value.

Parameters

ParameterType
deviceNamestring

Returns

ClockSyncCapability


createBackgroundBleManager()

function createBackgroundBleManager(__namedParameters?): BleManager;

Creates a BLE manager configured for iOS CoreBluetooth state restoration. The returned manager must be created once at module scope, not inside a React render.

Parameters

ParameterType
__namedParameters?BackgroundBleManagerOptions

Returns

BleManager


createBluetoothRuntime()

function createBluetoothRuntime(bleManager?, initialBackgroundScanEnabled?): BluetoothRuntime;

Creates the store that backs the Bluetooth hooks.

Parameters

ParameterType
bleManager?BleManager
initialBackgroundScanEnabled?boolean

Returns

BluetoothRuntime


createFakeBleDevice()

function createFakeBleDevice(__namedParameters): FakeBleDevice;

Creates a GATT-capable fake device for connection and notification tests.

Parameters

ParameterType
__namedParametersFakeBleDeviceOptions

Returns

FakeBleDevice


createFakeBleManager()

function createFakeBleManager(__namedParameters?): FakeBleManager;

Creates a fake BLE manager with a controllable adapter state and scan results.

Parameters

ParameterType
__namedParameters?FakeBleManagerOptions

Returns

FakeBleManager


createFileQueueStorage()

function createFileQueueStorage(prefix?): BackgroundSyncStorage;

Stores each queue key in its own document file, so ECGs are not limited by KV entry sizes.

Parameters

ParameterTypeDefault value
prefix?string"ovok-native-background-sync"

Returns

BackgroundSyncStorage


createLegacyResultId()

function createLegacyResultId(deviceData, data): string;

The id SDKs before 1.16.1 gave the same reading, to find what they saved.

Parameters

ParameterType
deviceDataDeviceData
dataMeasurement

Returns

string


createStableResultId()

function createStableResultId(
   deviceData,
   data,
   receivedAt?
): string;

Creates an identity that is stable when a device sends its stored history again, in any time zone. A reading without a time of its own is a new measurement each time, so it is told apart by when it arrived.

Parameters

ParameterType
deviceDataDeviceData
dataMeasurement
receivedAt?Date

Returns

string


decodeAojError()

function decodeAojError(code): string | undefined;

Describes a temperature error code in words, or undefined for an unknown code.

Parameters

ParameterType
codenumber

Returns

string | undefined


decodeCheckmeEcgFile()

function decodeCheckmeEcgFile(bytes): CheckmeEcgFile | undefined;

Decodes Checkme's 21-byte ECG header and little-endian signed waveform.

Parameters

ParameterType
bytesreadonly string[]

Returns

CheckmeEcgFile | undefined


decodeCheckmePodResponse()

function decodeCheckmePodResponse(frame): CheckmePodResponse | undefined;

Decodes a complete response frame, or returns undefined if its header or length is invalid.

Parameters

ParameterType
framereadonly string[]

Returns

CheckmePodResponse | undefined


decodeCheckmeResponse()

function decodeCheckmeResponse(bytes): CheckmeResponse | undefined;

Decodes the two response envelopes used by Checkme Pro's vendor library.

Parameters

ParameterType
bytesreadonly string[]

Returns

CheckmeResponse | undefined


decodePulsebitEcgFile()

function decodePulsebitEcgFile(bytes): CheckmeEcgFile | undefined;

Decodes the 44-byte Pulsebit ECG header and its signed waveform.

Parameters

ParameterType
bytesreadonly string[]

Returns

CheckmeEcgFile | undefined


decodeVerovalEcgSamples()

function decodeVerovalEcgSamples(bytes, calibration?): number[];

Turns the bytes of a recording into millivolts.

A trailing odd byte is ignored: half a sample is not a sample. The conversion is the device's own, applied as it states it rather than reduced to a single factor, so a header that reports a different range still decodes correctly.

Parameters

ParameterTypeDefault value
bytesreadonly string[]undefined
calibration?EcgCalibrationDEFAULT_CALIBRATION

Returns

number[]


decodeViatomEcgRecording()

function decodeViatomEcgRecording(bytes): ViatomEcgRecording;

Decodes an ER1/ER2 recording. A file whose waveform does not last as long as its tail records is returned empty, because that file is in a format this decoder does not read.

Parameters

ParameterType
bytesUint8Array

Returns

ViatomEcgRecording


defineCustomDevice()

function defineCustomDevice(spec, options?): CustomDeviceDefinition;

Validates a declaration and compiles it into a runnable device.

Every rule the declarative decoder relies on is checked here, at registration, because the alternative is a plausible wrong number at read time. Registration fails loudly - it throws, naming the exact position in the declaration - and a device that fails to compile is never scanned for.

Parameters

ParameterType
specCustomDeviceSpec
options?{ createCommandSequencer?: CustomSequencerFactory; createFrameHandler?: CustomFrameHandlerFactory; decorateReading?: CustomReadingDecorator; frameReader?: FrameReader; }
options.createCommandSequencer?CustomSequencerFactory
options.createFrameHandler?CustomFrameHandlerFactory
options.decorateReading?CustomReadingDecorator
options.frameReader?FrameReader

Returns

CustomDeviceDefinition


defineRecordedDeviceFrames()

function defineRecordedDeviceFrames<T>(fixtures): Readonly<Record<T, readonly RecordedBleFrame[]>>;

A registry helper lets an app keep fixtures for every device it supports.

Type Parameters

Type Parameter
T extends string

Parameters

ParameterType
fixturesRecord<T, readonly RecordedBleFrame[]>

Returns

Readonly<Record<T, readonly RecordedBleFrame[]>>


describeLepuResponseType()

function describeLepuResponseType(frame): string;

Why a device refused, in words, for an error a person will read.

Parameters

ParameterType
framereadonly string[]

Returns

string


deviceTitle()

function deviceTitle(deviceData): string;

Returns the most useful human-readable name for a connected device. A product sharing a parser with other brands is named by its variant. Known integrated and catalog devices keep their product name even when the peripheral reports a radio-module manufacturer and model. Unknown devices fall back to their reported identity and then their advertised name.

Parameters

ParameterType
deviceDataDeviceData

Returns

string


er1Recorder()

function er1Recorder(advertisedName, params): CustomDeviceDefinition;

The ER1, and the handheld recorders sold under other names on the same protocol.

Parameters

ParameterType
advertisedNamestring
paramsViatomEcgParams

Returns

CustomDeviceDefinition


er2Recorder()

function er2Recorder(advertisedName, params): CustomDeviceDefinition;

The ER2, which reads the same block but over a link that grants nothing beyond the minimum. Asking it for the MTU the rest of the family grants is what the vendor's own SDK declines to do, and a command longer than the link carries is truncated rather than refused.

Parameters

ParameterType
advertisedNamestring
paramsViatomEcgParams

Returns

CustomDeviceDefinition


er3Recorder()

function er3Recorder(advertisedName, params): CustomDeviceDefinition;

The ER3, which reads the same parameter block from a different opcode.

Parameters

ParameterType
advertisedNamestring
paramsViatomEcgParams

Returns

CustomDeviceDefinition


findDeviceVariant()

function findDeviceVariant(device, advertisedName): DeviceVariant | undefined;

The brand and model behind an advertised name, for a parser listed in DEVICE_VARIANTS.

Parameters

ParameterType
devicestring
advertisedNamestring

Returns

DeviceVariant | undefined


getBackgroundServiceUUIDs()

function getBackgroundServiceUUIDs(acceptedDevices, additionalServiceUUIDs?): string[];

The services a background scan asks for: those of every accepted device whose services are known, and additionalServiceUUIDs. In the background iOS (and Android with the screen off) reports only devices advertising a listed service, so an accepted device whose services aren't known is found by a foreground scan only. One such device must not empty the list: iOS can't scan in the background without one.

Parameters

ParameterTypeDefault value
acceptedDevicesreadonly AcceptedDevice[]undefined
additionalServiceUUIDs?readonly string[][]

Returns

string[]


getClockParts()

function getClockParts(date, timezone?): object;

Splits a date into calendar and clock parts in the given timezone.

Parameters

ParameterTypeDefault value
dateDateundefined
timezone?ClockSyncTimezone"local"

Returns

NameTypeDescription
daynumberDay of the month.
hoursnumberHours, 0-23.
millisecondsnumberMilliseconds, 0-999.
minutesnumberMinutes, 0-59.
monthnumberMonth, 1-12.
secondsnumberSeconds, 0-59.
yearnumberFull year.

getRestoredBleState()

function getRestoredBleState(restoreStateIdentifier?): BleRestoredState | null | undefined;

Returns the state restored for an identifier, or undefined if restoration has not run yet.

Parameters

ParameterTypeDefault value
restoreStateIdentifier?stringDEFAULT_RESTORE_STATE_IDENTIFIER

Returns

BleRestoredState | null | undefined


isClockSyncEnabled()

function isClockSyncEnabled(options?): boolean;

True unless clock synchronisation is explicitly disabled.

Parameters

ParameterType
options?ClockSyncOptions

Returns

boolean


isLepuSuccess()

function isLepuSuccess(frame): boolean;

Whether the frame reports success.

Parameters

ParameterType
framereadonly string[]

Returns

boolean


isTrasenseS9Advertisement()

function isTrasenseS9Advertisement(advertisedName, manufacturerData?): boolean;

The SH09 reuses company ID 0x0A0A and advertises only as "S9". Require both fields and the exact manufacturer payload length; the name alone is ambiguous. react-native-ble-plx exposes the manufacturer-specific bytes as base64, including the two company-ID bytes at the start of the AD structure.

Parameters

ParameterType
advertisedNamestring
manufacturerData?string

Returns

boolean


lepodMonitor()

function lepodMonitor(advertisedName, params): CustomDeviceDefinition;

Declares a Lepod, reporting every reading its realtime frame carries.

An instrument that is not attached reports a value outside the physiological range for what it measures, so that reading is discarded and reported while the others in the same frame are still delivered. The device also marks those conditions in bits of a lead-off byte, which a declaration cannot select on - reading them quietly needs a device class.

Parameters

ParameterType
advertisedNamestring
paramsLepodParams

Returns

CustomDeviceDefinition


lepuDevice()

function lepuDevice(params): CustomDeviceDefinition;

Builds a custom device definition for a Lepu/Viatom family product from its params.

Parameters

ParameterType
paramsLepuDeviceParams

Returns

CustomDeviceDefinition


lepuNameMatch()

function lepuNameMatch(name, vocabulary?): RegExp;

Builds a matcher for one advertised name that cannot also match a longer one.

The vendor tests these names with a substring check in a hand-ordered cascade, so BP2 only fails to match a BP2W because BP2W happens to be checked first. Order is a fragile place to keep a safety property: it lives in whoever wrote the list, is invisible at the point of use, and an insertion in the wrong place silently binds the wrong driver.

Here the exclusions are derived instead. Every name in the vocabulary that extends this one becomes a negative lookahead, so the matcher is correct wherever it is used and in whatever order it is tried.

The match is deliberately open at the end, because these devices advertise a serial after the model - BP2 1234 - and the serial's shape varies across the family.

Parameters

ParameterTypeDefault value
namestringundefined
vocabulary?readonly string[]LEPU_DEVICE_NAMES

Returns

RegExp


lepuResponseType()

function lepuResponseType(frame): number;

Reads the response type byte of a frame.

Parameters

ParameterType
framereadonly string[]

Returns

number


lpBp2wMonitor()

function lpBp2wMonitor(params): CustomDeviceDefinition;

LP-BP2W, the Lepu-branded WiFi variant of the BP2 family.

Parameters

ParameterType
paramsViatomBpParams

Returns

CustomDeviceDefinition


parseA606Record()

function parseA606Record(frame): A606Record | undefined;

Decodes the 12-byte glucose payload inside a verified 16-byte ZH-SG record.

Parameters

ParameterType
framereadonly string[]

Returns

A606Record | undefined


parseCheckmeBloodPressureRecords()

function parseCheckmeBloodPressureRecords(bytes): CheckmeBloodPressureRecord[];

Parses a blood pressure list file into records, skipping entries with an invalid date.

Parameters

ParameterType
bytesreadonly string[]

Returns

CheckmeBloodPressureRecord[]


parseCheckmeDailyRecords()

function parseCheckmeDailyRecords(bytes): CheckmeDailyRecord[];

Parses a daily list file into records, skipping entries with an invalid date.

Parameters

ParameterType
bytesreadonly string[]

Returns

CheckmeDailyRecord[]


parseCheckmeEcgRecords()

function parseCheckmeEcgRecords(bytes): CheckmeEcgRecord[];

Parses an ECG list file into records, skipping entries with an invalid date.

Parameters

ParameterType
bytesreadonly string[]

Returns

CheckmeEcgRecord[]


parseCheckmeOxygenRecords()

function parseCheckmeOxygenRecords(bytes): CheckmeOxygenRecord[];

Parses an oxygen list file into records, skipping entries with an invalid date.

Parameters

ParameterType
bytesreadonly string[]

Returns

CheckmeOxygenRecord[]


parseCheckmePodRealtimeReading()

function parseCheckmePodRealtimeReading(content): CheckmePodRealtimeReading | undefined;

Decodes the 20-byte RtParam prefix used by the vendor's realtime response.

Parameters

ParameterType
contentreadonly string[]

Returns

CheckmePodRealtimeReading | undefined


parseCheckmeTemperatureRecords()

function parseCheckmeTemperatureRecords(bytes): CheckmeTemperatureRecord[];

Parses a temperature list file into records, skipping entries with an invalid date.

Parameters

ParameterType
bytesreadonly string[]

Returns

CheckmeTemperatureRecord[]


parseLepuDeviceInfo()

function parseLepuDeviceInfo(frame): LepuDeviceInfo | undefined;

Reads the reply to GET_INFO, or nothing if the frame is not one.

The command byte is checked rather than assumed, because this is the answer a driver decides its identity on: parsing some other frame as device info would produce a model number out of whatever bytes happened to sit at offset 20, and the gate would then pass on a coincidence.

A frame too short to hold the layout is refused for the same reason, as is one whose response type is anything but success: an error reply carries a reason where the device information would be, and reading it as a model number would identify the hardware from an error code. The vendor's own struct is at least 56 bytes; anything shorter than the serial length field cannot be read without inventing the parts that are missing.

Parameters

ParameterType
framereadonly string[]

Returns

LepuDeviceInfo | undefined


parsePulsebitEcgRecords()

function parsePulsebitEcgRecords(bytes): PulsebitEcgRecord[];

Decodes the 17-byte ECG index used by Pulsebit and Checkme EX.

Parameters

ParameterType
bytesreadonly string[]

Returns

PulsebitEcgRecord[]


parseRecordedAt()

function parseRecordedAt(frame): Date | undefined;

Reads the recording time from a history frame, or undefined if it is not a valid date.

Parameters

ParameterType
framereadonly string[]

Returns

Date | undefined


parseVerovalDuoControlRecordMetadata()

function parseVerovalDuoControlRecordMetadata(frame, recordOffset):
  | Pick<VerovalDuoControlMeasurement, "recordedAt" | "irregularHeartbeat">
  | undefined;

Reads the timestamp and irregular heartbeat flag of a stored record, or undefined if invalid.

Parameters

ParameterType
framereadonly string[]
recordOffsetnumber

Returns

| Pick<VerovalDuoControlMeasurement, "recordedAt" | "irregularHeartbeat"> | undefined


recordedAtFromT31Frame()

function recordedAtFromT31Frame(frame, now): Date | undefined;

Reconstructs when a reading was taken from the weekday and time in a frame, or undefined if invalid.

Parameters

ParameterType
framereadonly string[]
nowDate

Returns

Date | undefined


recordedAtFromViatomFileName()

function recordedAtFromViatomFileName(name): Date | undefined;

Reads the recording time encoded in the ER file name, when present.

Parameters

ParameterType
namestring

Returns

Date | undefined


replayRecordedFrames()

function replayRecordedFrames(frames, sink): Promise<void>;

Replays captured characteristic frames through an app-provided test sink.

Parameters

ParameterType
framesreadonly RecordedBleFrame[]
sinkRecordedFrameSink

Returns

Promise<void>


requestBluetoothPermission()

function requestBluetoothPermission(): Promise<boolean>;

Asks the OS for the Bluetooth permissions the platform needs; resolves to whether all were granted.

Returns

Promise<boolean>


reviveResultDates()

function reviveResultDates<T>(value): T;

Converts the ISO date strings of recordedAt, start and end fields back to Dates, recursively.

Type Parameters

Type Parameter
T

Parameters

ParameterType
valueT

Returns

T


setDeviceSecretStorage()

function setDeviceSecretStorage(next): void;

Sets the durable storage used for device secrets; pass undefined to keep them in memory only.

Parameters

ParameterType
nextDeviceSecretStorage | undefined

Returns

void


standardBloodPressureDevice()

function standardBloodPressureDevice(params): CustomDeviceDefinition;

Declares a Bluetooth SIG blood pressure profile device.

Parameters

ParameterType
paramsStandardDeviceParams

Returns

CustomDeviceDefinition


standardGlucoseDevice()

function standardGlucoseDevice(params): CustomDeviceDefinition;

Declares a Bluetooth SIG glucose profile device.

Parameters

ParameterType
paramsStandardDeviceParams

Returns

CustomDeviceDefinition


standardHeartRateDevice()

function standardHeartRateDevice(params): CustomDeviceDefinition;

Heart Rate Service 0x180D, Heart Rate Measurement 0x2A37.

Both heart-rate layouts are declared. A contact-not-detected frame is idle, so it cannot become a false reading while the strap is off the body. RR intervals, a list of any length, are read from the frame by the decorator and reported as rrIntervals.

Parameters

ParameterType
paramsStandardDeviceParams

Returns

CustomDeviceDefinition


standardPulseOximeterDevice()

function standardPulseOximeterDevice(params): CustomDeviceDefinition;

Pulse Oximeter Service 0x1822, PLX Spot-Check Measurement 0x2A5E.

Saturation and pulse rate are both required by the catalog, which matches the specification: a spot-check measurement always carries both, at bytes 1-4 whatever the flags say, so every flags value selects the same fields. The optional ones follow them.

Parameters

ParameterType
paramsStandardDeviceParams

Returns

CustomDeviceDefinition


standardThermometerDevice()

function standardThermometerDevice(params): CustomDeviceDefinition;

Health Thermometer Service 0x1809, Temperature Measurement 0x2A1C.

Parameters

ParameterType
paramsStandardDeviceParams

Returns

CustomDeviceDefinition


standardWeightScaleDevice()

function standardWeightScaleDevice(params): CustomDeviceDefinition;

Weight Scale Service 0x181D, Weight Measurement 0x2A9D.

The reading is a scaled integer rather than a float, so the resolution is applied here. A weight of 0xFFFF means the measurement failed, so it yields no reading.

Parameters

ParameterType
paramsStandardDeviceParams

Returns

CustomDeviceDefinition


tmbBpMonitor()

function tmbBpMonitor(advertisedName, params): CustomDeviceDefinition;

Declares a Viatom TMB monitor, whose history protocol is separate from the BP3 Lepu flow.

Parameters

ParameterType
advertisedNamestring
paramsViatomBpParams

Returns

CustomDeviceDefinition


toBluetoothError()

function toBluetoothError(error): BluetoothError;

Wraps any thrown value in a BluetoothError, keeping an existing one as is.

Parameters

ParameterType
errorunknown

Returns

BluetoothError


verovalCompactMonitor()

function verovalCompactMonitor(advertisedName, params): CustomDeviceDefinition;

Declares a compact Veroval blood pressure monitor by its advertised name.

Parameters

ParameterType
advertisedNamestring
paramsVerovalBpParams

Returns

CustomDeviceDefinition


verovalFusionMonitor()

function verovalFusionMonitor(params?): CustomDeviceDefinition;

Declares the Veroval fusion wireless blood-pressure monitor.

Parameters

ParameterType
params?VerovalFusionParams

Returns

CustomDeviceDefinition


viatomBpMonitor()

function viatomBpMonitor(advertisedName, params): CustomDeviceDefinition;

Declares one monitor of the BP2 series.

advertisedName is the name the vendor's SDK matches - BP2A, BP2T - and the matcher derived from it excludes every longer name in the family, so a declaration for BP2 cannot pick up a BP2W.

Parameters

ParameterType
advertisedNamestring
paramsViatomBpParams

Returns

CustomDeviceDefinition


viatomOximeter()

function viatomOximeter(advertisedName, params): CustomDeviceDefinition;

Declares one oximeter of the range.

The ViHealth wire protocol uses a distinct AA request / 55 response envelope. Replies carry a status byte rather than echoing the opcode, and the sensor state at byte 18 tells us whether the reading is usable. No-finger and acquiring frames are deliberately idle: they are normal states while the user puts the ring on, not decoding failures.

Parameters

ParameterType
advertisedNamestring
paramsViatomOximeterParams

Returns

CustomDeviceDefinition


viatomOxyIiMonitor()

function viatomOxyIiMonitor(advertisedName, params?): CustomDeviceDefinition;

Declares one model on the dedicated OxyII service and A5 frame.

Parameters

ParameterType
advertisedNamestring
params?ViatomOxyIiParams

Returns

CustomDeviceDefinition


visomatComfortSoftBtMonitor()

function visomatComfortSoftBtMonitor(params): CustomDeviceDefinition;

Declares the visomat comfort soft BT upper-arm monitor.

The monitor uses the Bluetooth SIG Blood Pressure Service and Measurement characteristic, so the shared profile handles the 0x2A35 measurement without a vendor-specific command or pairing flow.

Parameters

ParameterType
paramsVisomatComfortSoftBtParams

Returns

CustomDeviceDefinition

Interfaces

A606Record

A stored glucose record.

Properties

PropertyTypeDescription
bloodGlucosenumberBlood glucose value as reported by the device.
dataPositionnumberPosition of the record in the device history.
recordedAtDateWhen the reading was taken.

BackgroundBleManagerOptions

Options for createBackgroundBleManager.

Extends

  • Pick<BleManagerOptions, "restoreStateIdentifier">

Properties

PropertyTypeDescription
onRestoreState?(state) => voidCalled with the restored CoreBluetooth state, or null when there is none.

BackgroundSyncFlushOptions

Options for a flush of the background sync queue.

Properties

PropertyTypeDescription
includeExhausted?booleanAlso deliver items that ran out of retries.
resetExhausted?booleanGive exhausted items a fresh set of retries.
resetRetryBackoff?booleanRetry items now instead of waiting for their backoff to end.

BackgroundSyncOptions

Options for delivering results while the app is in the background.

Type Parameters

Type ParameterDefault type
T extends DeviceKeyDeviceKey

Properties

PropertyTypeDescription
android?objectOptional Android foreground-service configuration. When present, the service keeps the JS BLE scan process alive while the app is backgrounded.
android.foregroundService?AndroidBluetoothForegroundServiceOptionsAndroid foreground-service configuration.
enabled?booleanBackground delivery is opt-in.
getOwnerKey?() => string | undefinedReturns the stable, opaque key for the account currently able to accept a result. Required at runtime before queueing or delivering account-owned data.
maxRetries?numberNumber of delivery attempts before an item is retained as exhausted.
notifications?objectOptional local notification after a queued reading is accepted by onResult.
notifications.body?string | ((result) => string)Notification body, fixed or built from the result.
notifications.data?| Record<string, string | number | boolean | null> | ((result) => | Record<string, string | number | boolean | null> | undefined)Payload attached to the notification, fixed or built from the result.
notifications.enabled?booleanWhether local notifications are shown.
notifications.shouldNotify?(result) => booleanReturn false to suppress the notification for this accepted result.
notifications.title?stringNotification title.
onError?(error) => voidCalled when a corrupt stored queue is moved aside and reset.
onResult(result) => Promise<void>Called after a result is persisted. Resolve only after the result is accepted.
onResults?(results) => Promise<void>Takes every result that is due at once, so a device emptying its memory is saved in a few requests rather than one a reading. Resolve only after all of them are accepted. When it rejects, each is delivered by onResult on its own, so one that can't be saved doesn't hold back the rest; delivering a result twice must be harmless.
restoreStateIdentifier?stringiOS restoration identifier. Keep this stable for the lifetime of the app.
retryBackoffMs?numberBase delay for retries. Delays grow exponentially up to the third attempt.
serviceUUIDs?readonly string[]Additional service UUIDs to scan, useful for custom/native device declarations.
storageBackgroundSyncStorageA durable store that can hold hundreds of KB; createFileQueueStorage is provided for Expo.
storageKey?stringStorage key used by the queue.

BackgroundSyncResult

A queued result being delivered, with its delivery bookkeeping.

Extends

Type Parameters

Type ParameterDefault type
T extends DeviceKeyDeviceKey

Properties

PropertyTypeDescriptionOverridesInherited from
attemptnumberNumber of delivery attempts so far.--
dataOmitCaseType<MeasurementTypeForDevices<[T]>>The measurement.-ResultCallback.data
deviceDataDeviceDataDevice that produced the result.-ResultCallback.deviceData
idstringStable reading identity for idempotent delivery by the application backend.ResultCallback.id-
legacyId?stringThe id SDKs before 1.16.1 gave this reading, to recognise one they already saved.-ResultCallback.legacyId
ownerKeystringStable owner that queued this reading; use it instead of the active account when routing.--
queuedAtstringISO timestamp of when the result was queued.--
queueId?stringQueue entry identity; unlike id, this changes when a reading is enqueued again.--
recordedFor?stringThe account a series was recorded for. It closes later, perhaps after someone else signs in, and is queued for this account, not for whoever is signed in then.-ResultCallback.recordedFor
series?MeasurementSeriesEvery value of a series, for a result that closes one (a streaming device's values over up to an hour). data then holds each property's mean, from the series' start.-ResultCallback.series

BackgroundSyncStorage

Key-value storage the background queue persists to.

Properties

PropertyTypeDescription
getItem(key) => Promise<string | null>Reads the value stored under a key, or null.
setItem(key, value) => Promise<void>Stores a value under a key.

BluetoothDevicePickerProps

Props of BluetoothDevicePicker.

Extends

Properties

PropertyTypeDescriptionInherited from
devicesreadonly BTDeviceSelection[]Devices to choose from.-
dismissLabel?stringDismiss button label; defaults to "Not now".-
getDeviceImage?(device) => string | undefinedReturns an image URI for a device, shown in its default row.-
labelForDevice?(device) => stringReturns the display name of a device; defaults to its derived device title.-
onDismiss?() => voidCalled when the user dismisses the picker; the dismiss button only renders when provided.-
onSelect(device) => voidCalled with the device the user picks.-
renderRow?(device, actions) => ReactNodeRenders a custom row; return undefined to fall back to the default row.-
slots?Partial<OvokUiSlots>Replace individual primitives without forking an SDK component.OvokUiProps.slots
testID?stringTest identifier of the modal; the backdrop gets the -backdrop suffix.-
theme?OvokThemeOverrideA partial theme is merged with the active react-native-paper theme.OvokUiProps.theme
title?stringHeading text; defaults to "Choose a device".-
visiblebooleanWhether the picker is shown.-

BluetoothRuntime

Shared store and event bus behind the Bluetooth hooks.

Properties

PropertyTypeDescription
bleManager?BleManagerBLE manager the runtime was created with.
clearResults() => voidClears the results of every device.
devicesreadonly RuntimeDevice[]Known devices.
emit<K>(event, value) => voidDelivers an event to its listeners.
flushBackgroundSync() => Promise<void>Delivers queued background results; rejects when background sync is not configured.
getBackgroundScanEnabled() => booleanWhether background scanning is on.
getPairedDeviceIds(storageKey) => readonly string[] | undefinedReturns the cached paired device IDs for a storage key, if loaded.
getResultConnectionId(result) => numberReturns the connection counter value a result was received under.
getSnapshot() => BluetoothRuntimeSnapshotReturns the current state snapshot.
hasListeners(event) => booleanWhether anything listens for the event.
initializeBackgroundScanEnabled(enabled) => voidSets the initial background scan state; ignored once initialised.
loadPairedDeviceIds(storageKey, load) => Promise<readonly string[]>Loads the paired device IDs once per storage key and caches them.
manager?BluetoothRuntimeManagerManager controlling scanning and connections, once set.
removeDevice(deviceId) => voidRemoves a device.
setAutoConnect(enabled, delayMs?, onDeviceSelectionRequired?) => voidConfigures automatic connection on the manager.
setBackgroundScanEnabled(enabled) => voidTurns background scanning on or off.
setBackgroundSyncFlush(flush?) => voidRegisters the function that delivers queued background results.
setBluetoothPermissionStatus(status) => voidRecords the Bluetooth permission status.
setBluetoothState(state) => voidRecords the Bluetooth adapter state.
setDeviceConnectionEvent(event) => voidRecords a connection event on its device.
setDeviceResult(result) => voidRecords a result on its device, ignoring one already recorded.
setDeviceStatus(value) => voidRecords a device status.
setManager(manager?) => voidSets or clears the Bluetooth manager.
setPairedDeviceIds(storageKey, ids) => voidReplaces the cached paired device IDs and notifies listeners.
subscribe<K>(event, callback) => () => voidListens for an event; returns an unsubscribe function.
subscribeState(callback) => () => voidSubscribes to state changes; returns an unsubscribe function.
upsertDevice(device) => voidAdds a device or replaces its handle, keeping its status and results.

BluetoothRuntimeSnapshot

Immutable view of the runtime state that hooks subscribe to.

Properties

PropertyTypeDescription
backgroundScanEnabledbooleanWhether background scanning is on.
bluetoothPermissionStatusBluetoothPermissionStatusBluetooth permission status.
bluetoothStateRuntimeBluetoothStateBluetooth adapter state.
devicesreadonly RuntimeDevice[]Known devices.
managerReadybooleanWhether the Bluetooth manager has been set.

BosoMedicusParams

Params for declaring a Boso Medicus.

Properties

PropertyTypeDescription
id?stringReported back as deviceData.name for the registered declaration.
nameMatch?string | RegExpOverrides the documented name matcher for firmware or test fixtures.
stuckDataTimeoutMs?numberOverrides the default settle time for a slower monitor.

BTManagerOptions

Options for BTManager.

Properties

PropertyTypeDescription
autoConnect?booleanConnect one newly discovered device automatically after the scan settles.
autoConnectDelayMs?numberSettle time in milliseconds before auto-connecting; defaults to 500.
backgroundEnabled?booleanWhether scanning runs with the background service filter.
clearDeviceHistory?booleanClear device-held history after it has been downloaded, when supported.
clockSync?ClockSyncOptionsClock synchronisation settings.
deliveredEcgFileNames?readonly string[]Names of ECG files already delivered, so they are not downloaded again.
deliveredFileNames?readonly string[]Names of stored files already delivered, so they are not downloaded again.
getOwnerKey?() => string | undefinedThe signed-in account, which each series is recorded for.
onDeviceSelectionRequired?(selection) => voidCalled when more than one supported device is discovered in the settle window.
oneReadingPerConnection?booleanReport only the first reading of each connection.
recordCursorStorage?BackgroundSyncStorageWhere a device that hands over its stored records remembers which it already handed over, so the next connection asks only for the others: the newest record a Bluetooth SIG glucose meter sent, and the stored files of a Viatom monitor (ER1, BP2) whose readings onResult queued or saved. Use the store your results queue uses. Without it every connection asks for all records.
resultPolicies?Partial<Record<string, DeviceResultPolicy>>Result policy per device name.
seriesStorage?BackgroundSyncStorageWhere series being recorded (a "series" result policy) wait, so one survives the app closing; use the store your results queue in. Without it they live in memory, and a closed app loses the series it was recording.
serviceUUIDs?readonly string[] | nullThe services a background scan asks for (see getBackgroundServiceUUIDs). A foreground scan stays unfiltered, so every accepted device can be found on screen.

BTProviderChildWrapperProps

Props the Bluetooth provider passes down to its inner wrapper.

Extended by

Type Parameters

Type Parameter
T extends readonly AcceptedDevice[]

Properties

PropertyTypeDescription
acceptedDevicesTDevices the provider scans for and accepts.
autoConnect?booleanConnect to a found device automatically.
autoConnectDelayMs?numberDelay in milliseconds before an automatic connection starts.
backgroundSync?BackgroundSyncOptions<KeyOfAccepted<T[number]>>Options for syncing devices in the background.
bleManagerBleManagerBLE manager used for scanning and connecting.
clearDeviceHistory?booleanClear supported device history after it has been downloaded.
clockSync?ClockSyncOptionsOptions for synchronising device clocks.
deliveredEcgFileNames?readonly string[]Names of ECG files already delivered, so they are not downloaded again.
deliveredFileNames?readonly string[]Names of stored files already delivered, so they are not downloaded again.
onConnectionEvent?(data) => voidCalled for connection lifecycle events such as pairing or battery.
onDeviceFound?(device, manager) => Promise<void>Called when an accepted device is found.
onDeviceSelectionRequired?(selection) => voidCalled when several devices match and the user must pick one.
onDeviceStatusChanged?(data) => voidCalled when a device status changes.
oneReadingPerConnection?booleanReport one result per connection, then stay quiet until the next.
onError?(data) => voidCalled when a Bluetooth or device error occurs.
onResult?(data) => voidCalled when a device produces a result.
permissionStatus?BluetoothPermissionStatusCurrent Bluetooth permission status.
resultPolicies?Partial<Record<string, DeviceResultPolicy>>Result policy per device name.

BTProviderPermissionFallbackProps

Props handed to the permission fallback renderer.

Properties

PropertyTypeDescription
openSettings() => voidOpens the system settings for the app.
request() => Promise<boolean>Asks for the permission; resolves to whether it was granted.
status"denied" | "blocked"Why Bluetooth cannot be used yet.

BTProviderProps

Props the Bluetooth provider passes down to its inner wrapper.

Extends

Type Parameters

Type Parameter
T extends readonly AcceptedDevice[]

Properties

PropertyTypeDescriptionInherited from
acceptedDevicesTDevices the provider scans for and accepts.BTProviderChildWrapperProps.acceptedDevices
autoConnect?booleanConnect to a found device automatically.BTProviderChildWrapperProps.autoConnect
autoConnectDelayMs?numberDelay in milliseconds before an automatic connection starts.BTProviderChildWrapperProps.autoConnectDelayMs
backgroundSync?BackgroundSyncOptions<KeyOfAccepted<T[number]>>Options for syncing devices in the background.BTProviderChildWrapperProps.backgroundSync
bleManagerBleManagerBLE manager used for scanning and connecting.BTProviderChildWrapperProps.bleManager
clearDeviceHistory?booleanClear supported device history after it has been downloaded.BTProviderChildWrapperProps.clearDeviceHistory
clockSync?ClockSyncOptionsOptions for synchronising device clocks.BTProviderChildWrapperProps.clockSync
deliveredEcgFileNames?readonly string[]Names of ECG files already delivered, so they are not downloaded again.BTProviderChildWrapperProps.deliveredEcgFileNames
deliveredFileNames?readonly string[]Names of stored files already delivered, so they are not downloaded again.BTProviderChildWrapperProps.deliveredFileNames
gateOnPermission?booleanGate children on the automatic permission request. Defaults to false.-
onAccessPermissionChanged?(accessPermission) => voidCalled when Bluetooth access permission is granted or lost.-
onConnectionEvent?(data) => voidCalled for connection lifecycle events such as pairing or battery.BTProviderChildWrapperProps.onConnectionEvent
onDeviceFound?(device, manager) => Promise<void>Called when an accepted device is found.BTProviderChildWrapperProps.onDeviceFound
onDeviceSelectionRequired?(selection) => voidCalled when several devices match and the user must pick one.BTProviderChildWrapperProps.onDeviceSelectionRequired
onDeviceStatusChanged?(data) => voidCalled when a device status changes.BTProviderChildWrapperProps.onDeviceStatusChanged
oneReadingPerConnection?booleanReport one result per connection, then stay quiet until the next.BTProviderChildWrapperProps.oneReadingPerConnection
onError?(data) => voidCalled when a Bluetooth or device error occurs.BTProviderChildWrapperProps.onError
onResult?(data) => voidCalled when a device produces a result.BTProviderChildWrapperProps.onResult
permissionFallback?(permission) => ReactNodeCallback to be called when the access permission is not granted and the user is asked to open the settings-
permissionStatus?BluetoothPermissionStatusCurrent Bluetooth permission status.BTProviderChildWrapperProps.permissionStatus
requestPermissionOnMount?booleanRequest permission on mount (default: true). Set false to defer permission and scanning to an app-triggered request.-
resultPolicies?Partial<Record<string, DeviceResultPolicy>>Result policy per device name.BTProviderChildWrapperProps.resultPolicies

CatalogField

The measurement types a declaration may produce, the properties each one accepts, the canonical unit of every property, and the physiological envelope outside which a decoded value is treated as a decoding fault rather than a reading.

A measurement type absent from this catalog cannot be declared. ECG's waveform is still assembled by a device frame handler, but its scalar heart rate can be declared alongside another reading in a combined frame.

The property names mirror the measurement types in @ovok/core. A typo would otherwise produce an object the backend silently drops, so it is rejected at registration instead.

required marks the properties without which the reading is not that measurement. Every property in @ovok/core is optional, so a declaration that named only systolic would otherwise compile and then post a blood pressure with no diastolic - a plausible clinical record of something that was never measured. A "result" case must declare all of them.

Properties

PropertyTypeDescription
display?stringHuman-readable label for localized catalog UIs.
maxnumberHighest decodable value; anything above is treated as a decoding fault.
minnumberLowest decodable value; anything below is treated as a decoding fault.
negativeAtZero?booleanA zero reading is the device's negative result for this analyte.
normalMax?numberUpper bound of the normal range.
normalMin?numberLower bound of the normal range.
qualitative?booleanRender this analyte as a qualitative Negative/Positive result.
required?booleanWhether a result must declare this property.
unitstringCanonical unit of the property.

CheckmeBloodPressureRecord

A blood pressure record.

Extends

Properties

PropertyTypeDescriptionInherited from
diastolicnumberDiastolic pressure.-
heartRatenumberHeart rate in beats per minute.-
recordedAtDateWhen the record was taken.CheckmeTimestampedRecord.recordedAt
recordNamestringDevice file name of the record, formatted YYYYMMDDHHmmss.CheckmeTimestampedRecord.recordName
systolicnumberSystolic pressure.-

CheckmeDailyRecord

A daily check record.

Extends

Properties

PropertyTypeDescriptionInherited from
bloodOxygennumberBlood oxygen saturation in percent.-
diastolic?numberDiastolic pressure, when a blood pressure value was recorded.-
heartRatenumberHeart rate in beats per minute.-
recordedAtDateWhen the record was taken.CheckmeTimestampedRecord.recordedAt
recordNamestringDevice file name of the record, formatted YYYYMMDDHHmmss.CheckmeTimestampedRecord.recordName
systolic?numberSystolic pressure, when a blood pressure value was recorded.-

CheckmeEcgFile

A decoded ECG recording.

Properties

PropertyTypeDescription
diagnosticResultnumberDevice-reported diagnostic result code.
diagramPointsnumber[]Waveform samples in millivolts.
durationnumberRecording duration in seconds.
heartRatenumberHeart rate in beats per minute.

CheckmeEcgRecord

An ECG index record.

Extends

Properties

PropertyTypeDescriptionInherited from
recordedAtDateWhen the record was taken.CheckmeTimestampedRecord.recordedAt
recordNamestringDevice file name of the record, formatted YYYYMMDDHHmmss.CheckmeTimestampedRecord.recordName
resultnumberDevice-reported ECG result code.-

CheckmeOxygenRecord

A blood oxygen record.

Extends

Properties

PropertyTypeDescriptionInherited from
bloodOxygennumberBlood oxygen saturation in percent.-
heartRatenumberHeart rate in beats per minute.-
perfusionIndexnumberPerfusion index.-
recordedAtDateWhen the record was taken.CheckmeTimestampedRecord.recordedAt
recordNamestringDevice file name of the record, formatted YYYYMMDDHHmmss.CheckmeTimestampedRecord.recordName

CheckmePodRealtimeReading

A realtime reading from a Checkme Pod.

Properties

PropertyTypeDescription
batterynumberBattery level.
batteryStatenumberBattery state code.
bloodOxygennumberBlood oxygen saturation in percent.
oxygenStatenumberOxygen measurement state code.
perfusionIndexnumberPerfusion index.
pulseRatenumberPulse rate in beats per minute.
runStatusnumberDevice run status code.
temperaturenumberTemperature in degrees Celsius.
temperatureStatenumberTemperature measurement state code.

CheckmePodResponse

A decoded Checkme Pod response.

Properties

PropertyTypeDescription
contentstring[]Payload bytes as hex strings.
sequencenumberSequence number of the response.
statebooleanWhether the device reported success.

CheckmePodSequencerParams

Params of CheckmePodSequencer.

Properties

PropertyTypeDescription
now?() => DateClock used to timestamp readings and sync the device; defaults to the system clock.
onResult(result) => voidCalled with each decoded measurement.
writeOmit<DeviceCommand, "frame">Where commands are written.

CheckmeResponse

A decoded Checkme response.

Properties

PropertyTypeDescription
contentstring[]Payload bytes as hex strings.
headnumberEnvelope header byte: 0x55 or 0xa5.
sequencenumberSequence number of the response.
statebooleanWhether the device reported success.

CheckmeTemperatureRecord

A body temperature record.

Extends

Properties

PropertyTypeDescriptionInherited from
recordedAtDateWhen the record was taken.CheckmeTimestampedRecord.recordedAt
recordNamestringDevice file name of the record, formatted YYYYMMDDHHmmss.CheckmeTimestampedRecord.recordName
temperaturenumberTemperature in degrees Celsius.-

CheckmeTimestampedRecord

Fields shared by every timestamped Checkme record.

Extended by

Properties

PropertyTypeDescription
recordedAtDateWhen the record was taken.
recordNamestringDevice file name of the record, formatted YYYYMMDDHHmmss.

CheckmeTransferParams

Params of the Checkme file transfer sequencer.

Properties

PropertyTypeDescription
onResult(result) => voidCalled with each decoded measurement.
writeOmit<DeviceCommand, "frame">Where commands are written.

ClockSyncOptions

Options controlling device clock synchronisation.

Properties

PropertyTypeDescription
enabled?booleanOptional clock writes are enabled by default for verified protocols.
now?() => DateSupplies the time sent to a device. Defaults to the current time.
timezone?ClockSyncTimezoneInterprets the supplied Date explicitly; defaults to the local timezone.

CommandSequencer

Decides what to send a device, and when.

These protocols are self-clocking: the device answers a request, and the answer is what says which request comes next. A file read walks its offsets that way, and an identity check gates everything after it on the reply to the first command. Neither can be expressed by re-sending one fixed frame, which is all the SDK could do before.

At most one command is outstanding at a time. The transport serialises writes, so an implementation may assume the frame it is answering is the reply to the command it last returned.

Methods

commandProgress()?
commandProgress?(frame): "ignored" | "partial" | "complete";

Describes whether a frame is ignored, partial, or completes the outstanding command.

Parameters
ParameterType
framereadonly string[]
Returns

"ignored" | "partial" | "complete"

commandTimeoutMs()?
commandTimeoutMs?(): number | undefined;

The response timeout for the currently outstanding command, when a protocol needs one.

Returns

number | undefined

initialCommands()
initialCommands():
  | readonly DeviceCommand[]
| Promise<readonly DeviceCommand[]>;

Sent once every characteristic is subscribed. Empty starts a device that only listens.

May resolve later, for a first command that depends on state read from storage.

Returns

| readonly DeviceCommand[] | Promise<readonly DeviceCommand[]>

isHistoryTransfer()?
isHistoryTransfer?(): boolean;

True when accepted results are records downloaded from device history.

Returns

boolean

isNormalDisconnect()?
isNormalDisconnect?(): boolean;

True when a timeout-style disconnect is the device's normal completion signal.

Returns

boolean

nextCommand()
nextCommand(frame, characteristicUuid?): readonly DeviceCommand[] | undefined;

Answers one complete frame, with the characteristic it arrived on.

Returning undefined sends nothing, which is how a sequencer waits: an unidentified device is left alone rather than addressed with an opcode that may mean something else on the hardware actually present.

Parameters
ParameterType
framereadonly string[]
characteristicUuid?string
Returns

readonly DeviceCommand[] | undefined

onCommandTimeout()?
onCommandTimeout?(): CommandTimeoutResult;

Re-sends the current command or ends the exchange after a response timeout.

Returns

CommandTimeoutResult

onServicesDiscovered()?
onServicesDiscovered?(serviceUuids): void;

The declared services discovery found, before initialCommands; lets a protocol pick its generation.

Parameters
ParameterType
serviceUuidsreadonly string[]
Returns

void


CommandTimeoutResult

What to do after a command received no response.

Properties

PropertyTypeDescription
commands?readonly DeviceCommand[]Commands to send in place of the timed-out one.
terminal?booleanTrue when the exchange is over and nothing more is sent.

CompiledCustomField

A validated field spec with every default resolved.

Properties

PropertyTypeDescription
byteIndexesnumber[]Already reordered for the declared byte order.
decimals?numberDecimal places the value is rounded to, when set.
encodingCustomFieldEncodingHow the bytes are decoded into a number.
maxnumberHighest accepted decoded value.
minnumberHard accepted range. A decoded value outside it is an error, never a reading.
namestringProperty name the decoded value is reported under.
offsetnumberValue added after scaling.
scalenumberMultiplier applied to the raw value.
unitstringUnit the value is reported in.

CustomCaseSpec

One frame shape the device emits, selected by the monitor's caseSelectorBytes.

Properties

PropertyTypeDescription
additionalMeasurements?CustomMeasurementSpec[]Further readings the same frame carries. A multi-parameter monitor sends one frame holding a heart rate, an oxygen saturation and a temperature at once. Those are three measurements, not one with nine properties, so each is declared with its own type and its own fields and each is reported separately. Property names must still be unique across the whole frame, because the decoded object is flat. Only meaningful on a "result" case.
description?stringFree-text note describing the frame shape.
fields?CustomFieldSpec[]Required and non-empty for a "result" case, forbidden otherwise.
kindCustomCaseKindWhat this frame shape represents.
measurementTypeKey?MeasurementTypeKeyRequired for a "result" case. Must be a type the declarative decoder supports.
minLengthBytes?numberShortest frame of this shape, when it is longer than the characteristic's minimum. A selector byte often decides how long the frame is: the Bluetooth blood-pressure profile puts a timestamp and a pulse rate behind flag bits, so one shape is seven bytes and another is sixteen. Without this, every case is bounded by the shortest of them and the later fields cannot be declared at all - which is how a pulse rate gets dropped from a device that reports one. Must be at least the characteristic's frame.minLengthBytes. A frame that arrives shorter than the case it selected decodes nothing and is reported, not guessed at.
repeatedRecords?objectThe frame is a run of fixed-width records, each decoded the same way. A device that hands over its stored history answers one request with every record it holds, back to back. Those are separate readings taken at separate times, so each is reported on its own rather than merged. Byte indexes are relative to a record, not to the frame, and are bounds-checked against recordBytes. A trailing part-record is ignored: a whole number of records is what the device sends, and half of one is not a reading.
repeatedRecords.from?numberByte the first record starts at. Defaults to 0.
repeatedRecords.recordBytesnumberWidth of one record.
requiresStream?booleanOnly accept this result after a stream case started the same measurement session.
selectorstringConcatenated hex of the selector bytes that identifies this frame, e.g. "aa0f0801". Empty string when the characteristic declares no selector and has a single case.

CustomDeviceDefinition

A validated, ready-to-run custom device. Only defineCustomDevice produces one.

Properties

PropertyModifierTypeDescription
[CUSTOM_DEVICE_BRAND]readonlytrueBrand proving the definition came from defineCustomDevice.
clockSyncreadonlyClockSyncCapabilityWhether the device clock can be synchronised.
createCommandSequencer?readonlyCustomSequencerFactoryReplaces the declared write with a command sequence the protocol computes at connect time.
createFrameHandler?readonlyCustomFrameHandlerFactoryCreates per-device state for frames that need a protocol-specific decoder.
decorateReading?readonlyCustomReadingDecoratorAdds protocol metadata that is not a numeric measurement field.
fieldsreadonlyReadonlyMap<string, CompiledCustomField>Keyed by ${measurementTypeKey}:${fieldName}, used to bounds-check every reading.
frameReader?readonlyFrameReaderOptional protocol frame reader for declarations whose notifications may be batched.
framesreadonlyReadonlyMap<string, CustomFrameSpec>Frame declaration of every monitor characteristic, keyed by its 128-bit UUID.
idreadonlyCustomDeviceIdIdentifier of the device.
lepu?readonlyCustomLepuSpecValidated Lepu protocol declaration, with its UUIDs normalised.
mainServicesreadonlyIService[]Services of the device, in the form the Bluetooth layer consumes.
matchByServicereadonlybooleanWhether a peripheral without a name is matched by the declared service UUIDs.
nameMatchreadonlyRegExpMatches the advertised BLE name.
oneReadingPerConnectionreadonlybooleanWhether only one result is reported per connection.
preferredMtu?readonlynumberMTU to request once connected, when the declaration asked for one.
reportsBondedEvent?readonlybooleanEmit the bonded connection event after a successful connection.
sessionPolicy?readonlyCustomSessionPolicyHow live samples are aggregated when the session ends.
specreadonlyCustomDeviceSpecThe declaration this definition was built from.
stuckDataTimeoutreadonlynumberMilliseconds without a usable frame before the read is abandoned.
tmb?readonlyCustomTmbSpecValidated TMB protocol declaration, with its UUIDs normalised.

CustomDeviceSpec

Plain, JSON-shaped declaration of a Bluetooth device the SDK has no class for.

Properties

PropertyTypeDescription
clockSync?ClockSyncCapabilityDeclares the clock capability when a custom protocol has been verified.
id?stringReported back as deviceData.name. Built-in names are reserved.
lepu?CustomLepuSpecDeclares the Lepu/Viatom framed protocol, which brings its own frame reader and its own command sequence. A declaration with this needs no services[].write: commands are built rather than written down, and are addressed through lepu.write.
matchByService?booleanMatch by one of this declaration's service UUIDs when the peripheral has no name.
nameMatch?string | RegExpAdvertised BLE name. Omit for a service-matched declaration.
oneReadingPerConnection?booleanReport one result, then stay quiet until the next connection.
preferredMtu?numberMTU to ask for once connected. A larger one carries a frame in fewer notifications and a command in fewer writes. Omit it to keep whatever the platform negotiates.
servicesCustomServiceSpec[]Services the device exposes and the frames its characteristics emit.
sessionPolicy?CustomSessionPolicyAggregate valid live samples into one result when the session ends.
stuckDataTimeoutMsnumberMilliseconds without a usable frame before the read is abandoned. 1000-6000000.
tmb?CustomTmbSpecDeclares the TMB blood-pressure history protocol used by Viatom BP families.

CustomFieldSpec

One measurement property read out of a frame at fixed byte offsets.

The property name and unit are checked at registration against the measurement catalog for the case's measurementTypeKey. A name the SDK does not know, or a unit that is not the canonical one, is rejected - it would otherwise produce a measurement the backend silently drops, or a number in the wrong unit.

Properties

PropertyTypeDescription
byteIndexesnumber[]Byte offsets into the frame, in the order the device puts them on the wire.
byteOrder?CustomByteOrderDefaults to "big". Use "little" when the least significant byte comes first.
decimals?numberRound the result to this many decimals. 0-6.
encoding?CustomFieldEncodingDefaults to "uint".
max?numberNarrower accepted range than the catalog default. Must sit inside it.
min?numberNarrower accepted range than the catalog default. Must sit inside it.
namestringProperty on the emitted measurement, e.g. "systolic". Must exist for the case's type.
offset?numberAdded after scale. Defaults to 0.
scale?numberMultiplied onto the raw value. Defaults to 1. Use it for unit and resolution conversion.
unitstringCanonical unit for name. Declaring any other unit fails registration.

CustomFrameSpec

How a notification buffer is recognised as a complete frame.

A declared frame must be header aligned: the SDK never scans forward for the header, because the field offsets are absolute. A buffer that does not start with the header is never parsed - it fails the stuck-data timeout instead of producing a shifted reading.

Properties

PropertyTypeDescription
checksum?CustomChecksumSpecHow the frame proves it arrived intact. Optional because some devices genuinely send none, but a declaration without one accepts whatever the radio delivered. Declare it wherever the device has one.
header?string[]Required leading bytes as hex, e.g. ["aa", "55"].
length?objectAn in-frame length field, when the device has one.
length.byteOrderCustomByteOrderByte order of the length field.
length.indexnumberByte offset of the length field.
length.overheadBytesnumberBytes in the frame the length field does not count (header, checksum, ...).
length.widthBytes1 | 2Width of the length field in bytes.
minLengthBytesnumberShortest buffer that may be parsed. Every byte index the declaration reads - case selectors and fields alike - must be inside this length, which is checked at registration.

CustomLepuSpec

Declares that a device speaks the Lepu/Viatom framed protocol.

The whole family shares one frame - start | cmd | ~cmd | type | seq | len | payload | crc8 - one checksum, and one generic opcode space. What it does not share is the meaning of the low opcodes: 0x08 polls realtime data on a BP2, starts a blood-pressure measurement on an AirBp and starts an ECG on a Lepod. A frame built for the wrong one is still well formed, so nothing in the protocol catches a driver bound to the wrong hardware.

That is why pollCommand may not be declared without expectedDeviceTypes. Registration refuses it, because a poll with nobody to check it against is exactly the mis-binding the gate exists to prevent.

Properties

PropertyTypeDescription
clockSyncProtocol?"bp2" | "bp3"Clock payload format used before INFO, when clock synchronization is enabled.
ecgFileDecoder?"viatom-compressed" | "raw-int16"Decoder used for stored ECG files. Omit this when the format is not verified. raw-int16 is the former name of viatom-compressed and decodes the same way.
expectedDeviceTypesnumber[]The models this declaration was written for, as the device reports them in its information reply. A device reporting anything else is never polled. These values are only ever observed on hardware. The vendor's own SDK binds a driver from the advertised name and never reads the model back, so there is no table of them to copy - which is what pollCommand being optional is for.
fileTransfer?"ecg" | "bp2" | "bp3"Download and report each stored file using the verified decoder for that device family.
manufacturerDataProtocol?"viatom-oxygen"Selects the OxyII service and framing when the advertisement says protocol V2.
pollCommand?numberThe opcode to poll with, once the device has proved it is one of those models. Leaving it out is a working mode, not an omission: the device is asked what it is, the answer is reported, and nothing else is sent. That is how a model number is learned in the first place, and it is safe on hardware nobody has identified yet.
pollIntervalMs?numberDelay before each realtime poll, for devices with a fixed polling cadence.
protocol?"v2" | "viatom-oxygen"Protocol variant spoken by the device.
pulseWave?booleanAsks a viatom-oxygen oximeter for its pulse wave (0x1B, 125 Hz) and, unless its first answer shows it has none, polls that instead of realtime parameters. The wave is recorded only for a device whose bloodOxygenPulseRate result policy is "series", as series of up to five minutes. Its answer carries saturation and pulse rate at the same offsets as realtime parameters, so declare cases for it too.
recordingStatus?objectHow a recorder reports its open recording in each poll answer. Entering the saved state reads the stored ECG files again, and the recording can be stopped on request.
recordingStatus.byteIndexnumberThe run-status byte's index in the poll answer, header included; its low nibble is the state.
recordingStatus.leadOffStatenumberLow-nibble state while the electrodes have no contact and the recording stays open.
recordingStatus.minimumStoredSecondsnumberThe shortest recording the device stores when it is stopped.
recordingStatus.recordingStatenumberLow-nibble state while recording.
recordingStatus.savedStatenumberLow-nibble state once the recording has been stored.
recordingStatus.secondsByteIndexnumberWhere the seconds recorded so far sit in the poll answer, u32 little-endian.
recordingStatus.stopCommandnumberThe opcode that stops the recording, storing it when it is long enough.
recordingStatus.waveform?objectWhere a poll answer carries the ECG samples taken since the last one, for live display and chunks.
recordingStatus.waveform.countByteIndexnumberIndex of the u16 little-endian sample count, header included; int16 samples follow it.
recordingStatus.waveform.millivoltsPerCountnumberMillivolts per sample count.
recordingStatus.waveform.noSignalCount?numberThe count that means no signal, stored as 0 mV.
recordingStatus.waveform.sampleRateHznumberSamples per second.
rejectEncryptionAtBytes?number[]Manufacturer-data byte indexes whose high nibble of 2 means encryption is required, for protocols without the handshake; the standard protocol runs the handshake instead.
requestStartByte?stringThe leading byte used when building a request. Defaults to the first start byte.
setClockBeforeInfo?booleanSends the Viatom oximeter clock command before the information request.
startBytesstring[]The frame's leading byte. Most of the family uses a5, a smaller group 55, and a few accept either and settle on one at runtime - so it is a list.
writeobjectWhere commands are written. The service must be one this declaration also monitors.
write.characteristicUuidstringUUID of the characteristic commands are written to.
write.serviceUuidstringUUID of the service holding the write characteristic.
writeWithoutResponse?booleanSends the command through the write-without-response characteristic.

CustomMonitorSpec

A notify/indicate characteristic and the frames it emits.

Properties

PropertyTypeDescription
casesCustomCaseSpec[]Frame shapes the characteristic can emit.
caseSelectorBytes?number[]Byte offsets whose concatenated hex picks the case. Omit only when the characteristic has exactly one case whose selector is the empty string.
frameCustomFrameSpecHow a complete frame is recognised on this characteristic.
uuidstringUUID of the notify or indicate characteristic.

CustomSequencerContext

What a declaration's command sequencer is told about the device it is about to drive.

Properties

PropertyTypeDescription
deviceIdstringPlatform identifier of the BLE device.
recordCursorStorage?BackgroundSyncStorageWhere the manager keeps what must outlive a connection, when it was given a store.

CustomServiceSpec

A GATT service of a custom device and its monitored characteristics.

Properties

PropertyTypeDescription
monitorCustomMonitorSpec[]Notify or indicate characteristics to subscribe to.
uuidstringUUID of the service.
write?objectA single static command written after connect and after every processed frame. A device that needs a handshake, a challenge response or a command sequence cannot be declared and still needs a device class.
write.commandHexstringCommand bytes as hex.
write.uuidstringUUID of the characteristic the command is written to.
write.when?"every-frame" | "connect""every-frame" (the default) polls: the command goes out after connect and after every processed frame. "connect" sends it once after connect, for a request that is answered by a stream of frames - re-sending it after each one would restart the stream.

DeviceCommand

One write to a device.

The frame is the whole command, in hex bytes, and is addressed to a characteristic rather than left to be inferred from the service that happens to declare a write. A device with more than one writable characteristic - a control point and a data channel, say - cannot be driven at all when the target is implied.

Bytes rather than a hex string, because the transport splits a command that exceeds the negotiated MTU. Splitting a string is a byte boundary the caller has to remember to double; splitting an array cannot land inside a byte.

Properties

PropertyTypeDescription
characteristicUuidstringUUID of the characteristic to write to.
delayBeforeWriteMs?numberOptional pause before this command is written. Some peripherals need a short settling window after notifications are enabled or after acknowledging a page of records.
framereadonly string[]Command bytes, one hex string per byte.
serviceUuidstringUUID of the service holding the characteristic.
withoutResponse?booleanWrite without waiting for the device to acknowledge it. Some devices expose a write-without-response characteristic and nothing else, and a with-response write to one of those fails rather than degrading - the property simply is not there. It is the characteristic that decides this, not a preference, so it is declared alongside the one being written to.

DeviceConnectionEvent

Connection lifecycle event of a device.

Properties

PropertyTypeDescription
batteryLevel?numberBattery percentage when the device exposes the standard Battery Service.
clockAt?DateLocal time written to a device clock, when the protocol reports an acknowledgement.
deviceDataDeviceDataDevice the event relates to.
kindDeviceConnectionEventKindWhat happened.
pairingCodeRequired?booleanTrue when the platform is waiting for the user to confirm or enter a pairing code.
phoneUtcOffsetMinutes?numberPhone's UTC offset in minutes east of UTC at the clock write.
progress?objectProgress for a history transfer when the protocol exposes record counts.
progress.currentnumberRecords transferred so far.
progress.total?numberTotal records, when known.
recording?objectA recorder's open recording, on a recording event; absent once the recording has ended. Sent when it starts, when the electrodes lose or regain contact, and when it becomes long enough to be stored.
recording.leadOffSince?DateWhen the electrodes lost contact, while they have none; the recording stays open until it is stopped. An app can offer to stop it once this is old enough, as the vendor app does.
recording.secondsnumberSeconds recorded so far.
recording.storesOnStopbooleanStopping now stores the recording; a shorter one is discarded by the device.

DeviceMeasurementMap

Maps each integrated device to the measurement shapes it reports.

Properties

PropertyTypeDescription
A&D BPMBloodPressureMeasurementMeasurements reported by "A&D BPM".
A&D BPM CTSBloodPressureMeasurementMeasurements reported by "A&D BPM CTS".
A&D ScaleBodyWeightMeasurementMeasurements reported by "A&D Scale".
alivecorneverMeasurements reported by "alivecor".
AOJ BPMBloodPressureMeasurementMeasurements reported by "AOJ BPM".
AOJ BPM FFF0BloodPressureMeasurementMeasurements reported by "AOJ BPM FFF0".
AOJ-20ABodyTemperatureMeasurementMeasurements reported by "AOJ-20A".
AOJ-70BPulseOximeterMeasurementMeasurements reported by "AOJ-70B".
AP-20PulseOximeterMeasurementMeasurements reported by "AP-20".
AP-20-WPSPulseOximeterMeasurementMeasurements reported by "AP-20-WPS".
BBSM BS1BabySleepMeasurementMeasurements reported by "BBSM BS1".
BBSM S3PulseOximeterMeasurementMeasurements reported by "BBSM S3".
BC01UrineAnalyzeMeasurementMeasurements reported by "BC01".
BGMBloodGlucoseMeasurementMeasurements reported by "BGM".
Bioland-BGMBloodGlucoseMeasurementMeasurements reported by "Bioland-BGM".
BP2BloodPressureMeasurement | EcgMeasurementMeasurements reported by "BP2".
BPM-188BloodPressureMeasurementMeasurements reported by "BPM-188".
BPW1BloodPressureMeasurementMeasurements reported by "BPW1".
Checkme| BloodPressureMeasurement | BodyTemperatureMeasurement | PulseOximeterMeasurement | EcgMeasurement | CheckmeHeartRateMeasurementMeasurements reported by "Checkme".
Checkme EXEcgMeasurementMeasurements reported by "Checkme EX".
Checkme PodBodyTemperatureMeasurement | PulseOximeterMeasurementMeasurements reported by "Checkme Pod".
Checkme Pod-WPSBodyTemperatureMeasurement | PulseOximeterMeasurementMeasurements reported by "Checkme Pod-WPS".
CheckmeLEEcgMeasurementMeasurements reported by "CheckmeLE".
cmedneverMeasurements reported by "cmed".
Cofoe BPMBloodPressureMeasurementMeasurements reported by "Cofoe BPM".
Cofoe BPM HistoryBloodPressureMeasurementMeasurements reported by "Cofoe BPM History".
Cofoe GlucometerBloodGlucoseMeasurementMeasurements reported by "Cofoe Glucometer".
Cofoe Glucometer CGH25BloodGlucoseMeasurementMeasurements reported by "Cofoe Glucometer CGH25".
Cofoe ThermometerBodyTemperatureMeasurementMeasurements reported by "Cofoe Thermometer".
F4BodyWeightMeasurementMeasurements reported by "F4".
Famidoc BPMBloodPressureMeasurementMeasurements reported by "Famidoc BPM".
Famidoc Contact ThermometerBodyTemperatureMeasurementMeasurements reported by "Famidoc Contact Thermometer".
Famidoc IR ThermometerBodyTemperatureMeasurementMeasurements reported by "Famidoc IR Thermometer".
FORA IR20neverMeasurements reported by "FORA IR20".
FORA W550neverMeasurements reported by "FORA W550".
GBS-2012-BBodyWeightMeasurementMeasurements reported by "GBS-2012-B".
Genial-T31BodyTemperatureMeasurementMeasurements reported by "Genial-T31".
GlucoCheckBloodGlucoseMeasurementMeasurements reported by "GlucoCheck".
Joytech BPMBloodPressureMeasurementMeasurements reported by "Joytech BPM".
Joytech ThermometerBodyTemperatureMeasurementMeasurements reported by "Joytech Thermometer".
Jumper BPMBloodPressureMeasurementMeasurements reported by "Jumper BPM".
Jumper OximeterPulseOximeterMeasurementMeasurements reported by "Jumper Oximeter".
Jumper ThermometerBodyTemperatureMeasurementMeasurements reported by "Jumper Thermometer".
Le S5BodyWeightMeasurementMeasurements reported by "Le S5".
Lepu F4 scaleBodyWeightMeasurementMeasurements reported by "Lepu F4 scale".
Lepu F5 scaleBodyWeightMeasurementMeasurements reported by "Lepu F5 scale".
LPM311LipidPanelMeasurementMeasurements reported by "LPM311".
Mambo A5PulseOximeterMeasurementMeasurements reported by "Mambo A5".
mySenseBodyTemperatureMeasurementMeasurements reported by "mySense".
OxyfitPulseOximeterMeasurementMeasurements reported by "Oxyfit".
OxySmartPulseOximeterMeasurementMeasurements reported by "OxySmart".
PC-100BloodPressureMeasurement | PulseOximeterMeasurementMeasurements reported by "PC-100".
PC-68BPulseOximeterMeasurementMeasurements reported by "PC-68B".
PC300| BloodPressureMeasurement | BodyTemperatureMeasurement | BloodGlucoseMeasurement | PulseOximeterMeasurement | EcgMeasurementMeasurements reported by "PC300".
PC80BEcgMeasurementMeasurements reported by "PC80B".
PF10AW-MEPulseOximeterMeasurementMeasurements reported by "PF10AW-ME".
PF10BW-VEPulseOximeterMeasurementMeasurements reported by "PF10BW-VE".
PM10EcgMeasurementMeasurements reported by "PM10".
PoctorM3102BloodGlucoseMeasurement | UrineAnalyzeMeasurementMeasurements reported by "PoctorM3102".
PULMO80BneverMeasurements reported by "PULMO80B".
Pulsebit EXEcgMeasurementMeasurements reported by "Pulsebit EX".
R20RespiratoryTherapyMeasurementMeasurements reported by "R20".
R200RespiratoryTherapyMeasurementMeasurements reported by "R200".
SA10AW-PUPulseOximeterMeasurementMeasurements reported by "SA10AW-PU".
SP-20PulseOximeterMeasurementMeasurements reported by "SP-20".
SP-20-BLEPulseOximeterMeasurementMeasurements reported by "SP-20-BLE".
SP-20-WPSPulseOximeterMeasurementMeasurements reported by "SP-20-WPS".
TaiDoc BPMBloodPressureMeasurementMeasurements reported by "TaiDoc BPM".
TaiDoc MultiBloodPressureMeasurement | BloodGlucoseMeasurementMeasurements reported by "TaiDoc Multi".
TaiDoc OximeterPulseOximeterMeasurementMeasurements reported by "TaiDoc Oximeter".
TaiDoc ScaleBodyWeightMeasurementMeasurements reported by "TaiDoc Scale".
TAIDOC TD1107neverMeasurements reported by "TAIDOC TD1107".
TAIDOC TD4216BloodGlucoseMeasurementMeasurements reported by "TAIDOC TD4216".
TaiDoc ThermometerBodyTemperatureMeasurementMeasurements reported by "TaiDoc Thermometer".
TEMPneverMeasurements reported by "TEMP".
Transtek A6 BPMBloodPressureMeasurementMeasurements reported by "Transtek A6 BPM".
Transtek BPMBloodPressureMeasurementMeasurements reported by "Transtek BPM".
Transtek ScaleBodyWeightMeasurementMeasurements reported by "Transtek Scale".
Transtek Scale 1525BodyWeightMeasurementMeasurements reported by "Transtek Scale 1525".
Transtek TrackerActivityStepCountMeasurementMeasurements reported by "Transtek Tracker".
Trasense S9ActivityHeartRateMeasurement | ActivityStepCountMeasurementMeasurements reported by "Trasense S9".
twoneverMeasurements reported by "two".
Veroval ActivityActivityHeartRateMeasurement | ActivityStepCountMeasurementMeasurements reported by "Veroval Activity".
Veroval duo controlBloodPressureMeasurementMeasurements reported by "Veroval duo control".
Veroval ECGBloodPressureMeasurement | VerovalEcgMeasurementMeasurements reported by "Veroval ECG".
WBP-02BloodPressureMeasurementMeasurements reported by "WBP-02".
Yonker 80BPulseOximeterMeasurementMeasurements reported by "Yonker 80B".
Yonker BPMBloodPressureMeasurementMeasurements reported by "Yonker BPM".
Yonker OximeterPulseOximeterMeasurementMeasurements reported by "Yonker Oximeter".
Yonker ScaleBodyWeightMeasurementMeasurements reported by "Yonker Scale".
Yonker ThermometerBodyTemperatureMeasurementMeasurements reported by "Yonker Thermometer".
ZH-SG-A606BloodGlucoseMeasurementMeasurements reported by "ZH-SG-A606".

DeviceResultPolicy

Result policy of one device.

Properties

PropertyTypeDescription
acceptedMemorySlots?readonly number[]The device users whose readings are reported, by memory slot (a multi-user device reports its user as memorySlot, starting at 1). Readings of other users are dropped; a reading that names no device user is kept. Without it every user's readings are reported.
byMeasurement?Partial<Record<MeasurementTypeKey, ResultPolicy>>Policy overrides per measurement type.
default?ResultPolicyPolicy for measurement types without their own entry.

DeviceSecretStorage

Per-device secrets a protocol receives once, at pairing, and needs on every later connection - a Transtek monitor's 32-bit password is one.

Secrets are kept in memory for the app session. Give the SDK somewhere durable with setDeviceSecretStorage (a SecureStore-backed adapter is a good fit), or a device paired in one app session has to be paired again after the app restarts.

Properties

PropertyTypeDescription
getItem(key) => Promise<string | null>Reads the stored value for a key, or null if absent.
setItem(key, value) => Promise<void>Stores a value under a key.

DeviceStatusChangeCallback

Payload delivered when a device status changes.

Properties

PropertyTypeDescription
deviceDataDeviceDataDevice whose status changed.
measurementTypeKey?MeasurementTypeKeyMeasurement type the status relates to, when known.
statusDeviceStatusNew status.

DeviceWaveform

The ECG samples a recorder sent in one realtime answer, for drawing a live trace; never saved.

Properties

PropertyTypeDescription
atDateWhen the answer carrying them arrived.
deviceDataDeviceDataDevice the samples came from.
millivoltsPerCountnumberMillivolts per sample count.
sampleRateHznumberSamples per second.
samplesreadonly number[]Raw sample counts, oldest first.

EcgCalibration

Maps digital ECG samples to physical microvolts.

Properties

PropertyTypeDescription
digitalMaximumnumberHighest digital sample value.
digitalMinimumnumberLowest digital sample value.
physicalMaximumMicrovoltsnumberPhysical value of the highest digital sample, in microvolts.
physicalMinimumMicrovoltsnumberPhysical value of the lowest digital sample, in microvolts.

ErrorCallback

Payload delivered to the error handler.

Properties

PropertyTypeDescription
code?BluetoothErrorCodeStable machine-readable code for every normalized native/SDK failure.
deviceData?DeviceDataDevice the error relates to, when known.
errorstring | Error | BluetoothErrorMeasurement translation keys remain compatible with existing consumers.

FakeBleDevice

A fake GATT device and the handles that drive it.

Properties

PropertyTypeDescription
deviceDeviceThe fake device to hand to code under test.
disconnect() => Promise<void>Disconnects the device and notifies disconnect listeners.
emitCharacteristic(serviceUuid, characteristicUuid, value) => voidDelivers a notification value to everything monitoring the characteristic.

FakeBleDeviceOptions

Options for createFakeBleDevice.

Properties

PropertyTypeDescription
characteristics?Record<string, string>Characteristic values readable on the device, keyed serviceUuid/characteristicUuid.
idstringDevice identifier; also the default name.
localName?stringAdvertised local name; defaults to name.
manufacturerData?stringManufacturer data; defaults to an empty string.
mtu?numberInitial MTU; defaults to 23.
name?stringAdvertised name; defaults to id.
serviceUUIDs?readonly string[]Advertised service UUIDs; defaults to none.

FakeBleManager

A deterministic BLE manager for hook and scan integration tests. No hardware is used.

Properties

PropertyTypeDescription
createDevice(options) => FakeBleDeviceCreates a fake GATT device.
emitDevice(device) => voidReports a device to the active scan.
emitError(error) => voidReports a scan error to the active scan.
getScannedServiceUUIDs() => readonly string[] | nullService UUID filter of the last scan, or null if unfiltered or none started.
managerBleManagerThe fake manager to hand to code under test.
setState(state) => voidChanges the adapter state and notifies state listeners.
stopDeviceScan() => voidStops the active scan.

FakeBleManagerOptions

Options for createFakeBleManager.

Properties

PropertyTypeDescription
devices?readonly Device[]Devices reported immediately when a scan starts.
state?StateInitial Bluetooth adapter state; defaults to powered on.

GlucoseRecordDetails

What a Bluetooth SIG glucose meter says about a record, added to the reading beside bloodGlucose, which is always in mg/dL.

Properties the frame does not carry are absent.

Properties

PropertyTypeDescription
outOfRange?"low" | "high"The meter says the result lies beyond what it can measure. bloodGlucose is then the edge of its range, not a measurement; do not store or chart it as a value.
reportedUnit?GlucoseReportedUnitThe unit the meter reported; bloodGlucose keeps its precision when converted back.
sampleLocation?GlucoseSampleLocationWhere the sample was taken.
sensorStatus?readonly GlucoseSensorWarning[]Conditions the meter flagged that leave the value usable.
sequenceNumber?numberThe meter's own number for the record. It counts up, so it tells records apart.
specimen?GlucoseSpecimenTypeWhat the sample was taken from.

HealthImportAdapter

Deprecated

Import HealthImportAdapter from @ovok/native/data-sync instead.

Type Parameters

Type ParameterDefault type
TType extends stringstring

Properties

PropertyTypeDescription
getStatus(type) => Promise<"unsupported" | "refused" | "authorized" | "shouldRequest">Returns the access status of a data type.
request(types, background) => Promise<void>Requests access to the data types, optionally for background delivery.

IBTManagedDevice

Minimal contract of a device the Bluetooth manager can connect and disconnect.

Properties

PropertyTypeDescription
connect() => Promise<void>Opens the connection to the device.
disconnect() => Promise<void>Closes the connection to the device.
idstringIdentifier of the managed device.

IMedicalDevice

Declares which GATT services an integrated device uses.

Properties

PropertyTypeDescription
deviceNameIntegratedDevicesThe integrated device being described.
mainServiceIService[]Services used to talk to the device.

IService

A GATT service of an integrated device and its characteristics.

Properties

PropertyTypeDescription
monitorUuidsIMonitorCharacteristic[]Notify or indicate characteristics to subscribe to.
optional?booleanPresent on only some hardware revisions. Its monitors are skipped when discovery does not find it, instead of reporting a subscription error, so one class can declare every generation of a protocol and use whichever the connected device has.
uuidstringUUID of the service.
writeUuid?IWriteCharacteristicCharacteristic commands are written to.

LepuDeviceInfo

What a Lepu device says it is, in answer to GET_INFO.

Properties

PropertyTypeDescription
branchCodestringVendor branch code.
deviceTypenumberThe model, as a number. What a driver checks before addressing the hardware.
protocolMaxLengthnumberThe largest payload the device will accept, which bounds a file read's chunks.
serialNumberstringDevice serial number.

LepuDeviceParams

Describes one Lepu/Viatom family product for lepuDevice.

Properties

PropertyTypeDescription
casesCustomCaseSpec[]Frame cases that decode the product's payloads.
caseSelectorBytes?number[]Byte offsets that pick the case. The command byte at index 1 is the usual choice, and products that answer one command with several shapes add the byte that distinguishes them.
clockSync?ClockSyncCapabilityDeclares the device clock capability when the protocol has been verified.
clockSyncProtocol?"bp2" | "bp3"Clock payload format used before INFO, when clock synchronization is enabled.
createFrameHandler?CustomFrameHandlerFactoryReplaces the default frame handler with a custom one.
decorateReading?CustomReadingDecoratorAdjusts each decoded reading before it is reported.
ecgFileDecoder?"viatom-compressed" | "raw-int16"Decoder used for stored ECG files. Omit this when the format is not verified.
expectedDeviceTypes?number[]The models this declaration was written for, as the device reports them. Required to poll, and only ever learned from hardware: declare the device without a pollCommand first, connect, and read the model it reports.
fileTransfer?"ecg" | "bp2" | "bp3"Stored-file transfer protocol the product uses.
id?stringReported back as deviceData.name, and must not collide with a built-in device.
manufacturerDataProtocol?"viatom-oxygen"Selects the OxyII service and framing from the manufacturer's advertisement.
minLengthBytesnumberShortest frame any declared case may be read from. The seven-byte header and the trailing checksum are part of it, so a one-byte payload is nine.
nameMatch?string | RegExpThe name the hardware advertises.
pollCommand?numberThe opcode to poll with once the device has proved it is one of those models. Leave it out and the device identifies itself and nothing more. That is the safe first connection to hardware nobody has identified, because the low opcodes in this family act - one inflates a cuff, another starts an ECG - and mean different things on different products.
pollIntervalMs?numberDelay before each realtime poll, for devices with a fixed polling cadence.
protocol?"v2" | "viatom-oxygen"The protocol variant behind the shared Viatom service.
pulseWave?booleanPolls a legacy oximeter's pulse wave in place of its realtime parameters, when it serves one.
recordingStatus?objectHow a recorder reports its open recording; see CustomLepuSpec.
recordingStatus.byteIndexnumberThe run-status byte's index in the poll answer, header included; its low nibble is the state.
recordingStatus.leadOffStatenumberLow-nibble state while the electrodes have no contact and the recording stays open.
recordingStatus.minimumStoredSecondsnumberThe shortest recording the device stores when it is stopped.
recordingStatus.recordingStatenumberLow-nibble state while recording.
recordingStatus.savedStatenumberLow-nibble state once the recording has been stored.
recordingStatus.secondsByteIndexnumberWhere the seconds recorded so far sit in the poll answer, u32 little-endian.
recordingStatus.stopCommandnumberThe opcode that stops the recording, storing it when it is long enough.
recordingStatus.waveform?objectWhere a poll answer carries the ECG samples taken since the last one, for live display and chunks.
recordingStatus.waveform.countByteIndexnumberIndex of the u16 little-endian sample count, header included; int16 samples follow it.
recordingStatus.waveform.millivoltsPerCountnumberMillivolts per sample count.
recordingStatus.waveform.noSignalCount?numberThe count that means no signal, stored as 0 mV.
recordingStatus.waveform.sampleRateHznumberSamples per second.
rejectEncryptionAtBytes?number[]Manufacturer-data byte indexes whose high nibble of 2 requires encryption.
sessionPolicy?CustomSessionPolicyAggregate valid live samples when the protocol describes a session.
setClockBeforeInfo?booleanSends the Viatom oximeter clock command before INFO.
stuckDataTimeoutMs?numberTime in milliseconds without data before the connection is treated as stuck; defaults to 60 seconds.
transport?"standard" | "standardSmallMtu" | "aw1" | "ding" | "aiTele"Which characteristics the product exposes. Nearly all of them are "standard".
v2?objectAdditional OxyII monitor cases, selected by manufacturer-data protocol V2.
v2.casesCustomCaseSpec[]Frame cases for the additional OxyII monitor.
v2.caseSelectorBytes?number[]Byte offsets that pick the case.
v2.minLengthBytesnumberShortest frame the additional cases may be read from.
writeWithoutResponse?booleanUses write-without-response, as the Viatom oximeter characteristic requires.

LepuFile

A file read from a Lepu device.

Properties

PropertyTypeDescription
bytesUint8ArrayFile bytes.
namestringFile name on the device.

LepuFileTransferParams

Params of a Lepu file transfer.

Properties

PropertyTypeDescription
acceptFile?(name) => booleanFiles this transfer knows how to decode; rejected names are never opened.
afterTransfer?() => readonly DeviceCommand[]Commands to start after history has been exhausted, such as live polling.
builderLepuCommandBuilderBuilds this connection's frames. One per connection: it carries a sequence number.
maxFileBytes?numberLargest file accepted, in bytes; larger transfers are refused.
onError(reason) => voidCalled with why a transfer stopped. Required, so a failed read cannot pass unseen.
onFile(file) => voidCalled once per file, and only after its length was confirmed exactly.
onFileList?(names) => voidCalled with every name the device lists, before any is opened.
onProgress?(progress) => voidCalled as each chunk lands, for a long file with a person waiting on it.
skipFiles?ReadonlySet<string>Files the app has already persisted and does not want again.
writeOmit<DeviceCommand, "frame">The characteristic commands are written to.

MeasurementSeries

One kind of measurement a streaming device sent at a fixed interval: one value per slot for each measured property, null for a slot nothing arrived in. It has the shape of @ovok/core's MeasurementSeries, which seriesObservations saves as sampled data.

Extended by

Properties

PropertyTypeDescription
measurementTypeKeyMeasurementTypeKeyMeasurement type the series holds.
periodMsnumberMilliseconds from one slot to the next.
startDateWhen the first slot starts.
valuesPartial<Record<string, ReadonlyArray<number | null>>>By measured property, one value per slot.

OpenSeries

A series still being recorded: what a screen shows while a device streams.

Extends

Properties

PropertyTypeDescriptionInherited from
deviceDataDeviceDataDevice that is streaming the series.-
latestPartial<Record<string, number>>The last value of each property.-
measurementTypeKeyMeasurementTypeKeyMeasurement type the series holds.MeasurementSeries.measurementTypeKey
periodMsnumberMilliseconds from one slot to the next.MeasurementSeries.periodMs
startDateWhen the first slot starts.MeasurementSeries.start
updatedAtDateWhen the last value arrived.-
valuesPartial<Record<string, ReadonlyArray<number | null>>>By measured property, one value per slot.MeasurementSeries.values

PairedDeviceStorage

Key-value storage the paired device list persists to.

Properties

PropertyTypeDescription
getItem(key) => Promise<string | null>Reads the value stored under a key, or null.
setItem(key, value) => Promise<void>Stores a value under a key.

PulsebitEcgRecord

A Pulsebit or Checkme EX ECG index record.

Extends

Properties

PropertyTypeDescriptionInherited from
heartRatenumberHeart rate in beats per minute.-
recordedAtDateWhen the record was taken.CheckmeTimestampedRecord.recordedAt
recordNamestringDevice file name of the record, formatted YYYYMMDDHHmmss.CheckmeTimestampedRecord.recordName

RawBluetoothAccess

Direct GATT access to a connected device.

Properties

PropertyTypeDescription
read(serviceUUID, characteristicUUID) => Promise<Characteristic>Reads a characteristic.
write(serviceUUID, characteristicUUID, base64Value, withResponse?) => Promise<Characteristic>Writes a base64 value to a characteristic, with or without a response.

RecordedBleFrame

One captured notification frame.

Properties

PropertyTypeDescription
characteristicUUIDstringUUID of the characteristic the frame arrived on.
delayMs?numberOptional delay used by replay tests; defaults to zero.
valuestringFrame payload.

ResultCallback

Payload delivered to the result handler.

Extended by

Type Parameters

Type Parameter
T extends DeviceKey

Properties

PropertyTypeDescription
dataOmitCaseType<MeasurementTypeForDevices<[T]>>The measurement.
deviceDataDeviceDataDevice that produced the result.
idstringStable identity derived from the peripheral and recorded reading.
legacyId?stringThe id SDKs before 1.16.1 gave this reading, to recognise one they already saved.
recordedFor?stringThe account a series was recorded for. It closes later, perhaps after someone else signs in, and is queued for this account, not for whoever is signed in then.
series?MeasurementSeriesEvery value of a series, for a result that closes one (a streaming device's values over up to an hour). data then holds each property's mean, from the series' start.

RuntimeDevice

A discovered device with its latest status, results and events.

Properties

PropertyTypeDescription
deviceobjectHandle used to connect to or disconnect from the device.
device.connect() => Promise<void>Opens the connection to the device.
device.deviceDataDeviceDataIdentity of the device.
device.disconnect() => Promise<void>Closes the connection to the device.
device.idstringIdentifier of the device.
deviceDataDeviceDataIdentity of the device.
events?readonly DeviceConnectionEvent[]Recent connection events, oldest first.
idstringIdentifier of the device.
latestResult?RuntimeResultMost recent result.
results?readonly RuntimeResult[]Recent results, oldest first.
status?DeviceStatusLatest reported status.

RuntimeEventMap

Event names the runtime emits, with their payloads.

Properties

PropertyTypeDescription
connectionDeviceConnectionEventA connection lifecycle event occurred.
deviceFoundRuntimeDeviceAn accepted device was found.
errorErrorCallbackA Bluetooth or device error occurred.
pairedDevicesobjectThe paired device list stored under storageKey changed.
pairedDevices.storageKeystringStorage key of the changed list.
resultRuntimeResultA device produced a result.
statusDeviceStatusChangeCallbackA device status changed.
waveformDeviceWaveformA recording device sent live ECG samples; for display, never stored.

UseBackgroundSyncOptions

Options for useBackgroundSync.

Extended by

Properties

PropertyTypeDescription
canEnable?() => Promise<boolean>Checked before turning sync on; resolve false to mark it restricted.
enabled?booleanInitial state; defaults to off.
onEnabledChange?(enabled) => void | Promise<void>Called before the new state is applied, for example to persist it.

UseBluetoothPermissionOptions

Options for useBluetoothPermission.

Properties

PropertyTypeDescription
onPermissionChanged?(granted) => voidCalled with whether permission is granted after each request.
onRequestError?(error) => voidCalled when a permission request throws.
requestOnMount?booleanAsk for permission as soon as the hook mounts.
requestPermission?() => Promise<boolean>Replaces the default permission request.

UseBluetoothStateOptions

Options for useBluetoothState.

Properties

PropertyTypeDescription
bleManager?BleManagerBLE manager whose state is mirrored into the runtime, when not the provider's own.
requestPermission?() => Promise<boolean>Replaces the default permission request.

UseBTDeviceOptions

Options for useBTDevice.

Properties

PropertyTypeDescription
allowRawAccess?booleanExpose raw GATT access to the device.
autoConnect?booleanConnect to the selected device automatically.
id?stringSelects one device by ID when several match.

UseMeasurementsOptions

Options for useMeasurements.

Properties

PropertyTypeDescription
maxResults?numberMost recent results to keep; defaults to 100.
policy?ResultPolicyWhich results to keep; defaults to "all".

UseNearbyDeviceOfferOptions

Options for useNearbyDeviceOffer.

Properties

PropertyTypeDescription
declinedStorageKey?stringStorage key of the declined device list.
enabled?booleanWhether devices are offered; defaults to true.
onError?(error, device?) => voidCalled when pairing fails.
onPaired?(device) => voidCalled after the user accepts and the device is paired.
shouldOffer?(device) => booleanFilters which devices may be offered.
storagePairedDeviceStorageWhere the paired device IDs are persisted.
storageKey?stringStorage key of the paired device list.

UsePairedDevicesOptions

Options for usePairedDevices.

Properties

PropertyTypeDescription
autoPair?booleanConnect to paired devices automatically when they are found.
storagePairedDeviceStorageWhere the paired device IDs are persisted.
storageKey?stringStorage key; defaults to DEFAULT_PAIRED_DEVICE_STORAGE_KEY.

VerovalFusionParams

Params for declaring a Veroval Fusion.

Properties

PropertyTypeDescription
id?stringReported back as deviceData.name for the registered declaration.
nameMatch?string | RegExpOverrides the product-name matcher for firmware variants or test fixtures.
stuckDataTimeoutMs?numberOverrides the default settle time for a slower monitor.

ViatomEcgRecording

A decoded ER1/ER2 recording.

Properties

PropertyTypeDescription
durationnumberRecording duration in seconds.
samplesnumber[]Waveform samples in millivolts.

VisomatComfortSoftBtParams

Params for declaring a Visomat Comfort Soft BT.

Properties

PropertyTypeDescription
id?stringReported back as deviceData.name for the registered declaration.
nameMatch?string | RegExpOverrides the product-name matcher for firmware variants or test fixtures.
stuckDataTimeoutMs?numberOverrides the default settle time for a slower monitor.

Type Aliases

AcceptedDevice

type AcceptedDevice =
  | IntegratedDevices
  | CustomDeviceDefinition;

An entry of BTProvider's acceptedDevices: a built-in device, or a declared one.


BackgroundSyncStatus

type BackgroundSyncStatus = "on" | "off" | "restricted" | "blocked";

Background sync state: on, off, restricted by the system, or blocked by an error.


BluetoothPermissionStatus

type BluetoothPermissionStatus = "unknown" | "granted" | "denied" | "blocked";

Bluetooth permission state: unknown, granted, denied, or blocked (denied permanently).


BluetoothRuntimeManager

type BluetoothRuntimeManager = Pick<BTManager<readonly never[]>,
  | "setBackgroundScanEnabled"
  | "pauseScan"
  | "resumeScan"
  | "forget"
  | "disconnectDevice"
  | "stopRecording"
  | "keepConnecting"
| "setAutoConnect">;

The subset of BTManager the runtime controls.


BluetoothState

type BluetoothState = "on" | "off" | "unauthorized" | "unsupported";

Bluetooth adapter state as seen by the app.


BTDeviceFilter

type BTDeviceFilter =
  | DeviceKey
  | Omit<DeviceFilter, "where"> & object;

Which connected or nearby devices to follow: a model key (deviceData.name or .model), or a filter over what the device is (any DeviceFilter field, matched against its catalog product) and its state. { kind: "weight-scale" }, { manufacturer: "HARTMANN", status: DeviceStatus.CONNECTED }. A device whose parser serves several products counts as the one its advertised name identifies, else as its parser's product.


BTDeviceSelection

type BTDeviceSelection = Pick<BTManagedDevice, "id" | "device" | "deviceData" | "connect">;

A discovered device offered for selection: its id, BLE device, data and connect.


CheckmeMeasurement

type CheckmeMeasurement =
  | BloodPressureMeasurement
  | EcgMeasurement
  | PulseOximeterMeasurement
  | BodyTemperatureMeasurement
  | {
  heartRate?: number;
  measurementTypeKey: MeasurementTypeKey.heartRate;
  recordedAt?: Date;
};

A measurement reported by a Checkme device.

Union Members

BloodPressureMeasurement


EcgMeasurement


PulseOximeterMeasurement


BodyTemperatureMeasurement


Type Literal
{
  heartRate?: number;
  measurementTypeKey: MeasurementTypeKey.heartRate;
  recordedAt?: Date;
}
NameTypeDescription
heartRate?numberHeart rate in beats per minute.
measurementTypeKeyMeasurementTypeKey.heartRateMeasurement type of the reading.
recordedAt?DateWhen the reading was taken.

CheckmePodMeasurement

type CheckmePodMeasurement =
  | PulseOximeterMeasurement
  | {
  bodyTemp: number;
  measurementTypeKey: MeasurementTypeKey.temperature;
  recordedAt: Date;
};

A measurement reported by a Checkme Pod: pulse oximetry or body temperature.

Union Members

PulseOximeterMeasurement


Type Literal
{
  bodyTemp: number;
  measurementTypeKey: MeasurementTypeKey.temperature;
  recordedAt: Date;
}
NameTypeDescription
bodyTempnumberBody temperature in degrees Celsius.
measurementTypeKeyMeasurementTypeKey.temperatureMeasurement type of the reading.
recordedAtDateWhen the reading was taken.

CheckmePodResult

type CheckmePodResult = MeasurementWithCaseType<MeasurementTypeForDevices<[CHECKME_POD]>> & object;

A Checkme Pod measurement tagged with its case type.

Type Declaration

NameTypeDescription
caseTypeCaseTypeFrame case that produced the measurement.

ClockSyncCapability

type ClockSyncCapability = "supported" | "unsupported" | "unknown";

Whether a device clock can be synchronised.


ClockSyncTimezone

type ClockSyncTimezone = "local" | "utc";

Timezone used to interpret the time sent to a device.


CustomByteOrder

type CustomByteOrder = "big" | "little";

Order in which the declared byte indexes are assembled into a single value. "big" keeps the declared order, "little" reverses it.


CustomCaseKind

type CustomCaseKind = "result" | "stream" | "idle" | "event";

The three frame roles a declared device may use.

  • "result" a completed reading; its fields are decoded, bounds-checked and reported
  • "stream" the device is mid-measurement; moves the device into MEASURING
  • "idle" anything else the device emits (heartbeats, menu state); moves it back to CONNECTED
  • "event" a stateful frame handled by the device declaration; it carries no declarative reading

The stateful roles the built-in device classes use (dependent, sn, error) are deliberately not available to declarations - they require a device class.


CustomDeviceId

type CustomDeviceId = string & object;

Identifier of a device registered through defineCustomDevice. Branded so it never silently collapses into the IntegratedDevices union.

Type Declaration

NameTypeDescription
[customDeviceIdBrand]trueType-level brand; never present at runtime.

CustomFieldEncoding

type CustomFieldEncoding = "uint" | "int" | "sfloat" | "float" | "ascii" | "decimal-pair";

How the assembled bytes of a custom field are turned into a number.

  • "uint" unsigned integer, 1-6 bytes
  • "int" two's complement signed integer, 1-6 bytes
  • "sfloat" IEEE-11073 16-bit SFLOAT, exactly 2 bytes (standard GATT vitals)
  • "float" IEEE-11073 32-bit FLOAT, exactly 4 bytes (standard GATT thermometer)
  • "ascii" decimal digits written as text, one digit per byte
  • "decimal-pair" whole degrees followed by hundredths, e.g. 0x24 0x2f = 36.47

"ascii" is not a numeric encoding at all: the bytes are characters, so "120" arrives as 0x31 0x32 0x30. Serial-derived devices report whole records this way. Digits read left to right, so the field may not be declared little-endian - reversing them would turn 120 into 21.


CustomFrameHandler

type CustomFrameHandler = (params) => void;

Handles one decoded frame of a device that needs a protocol-specific decoder.

Parameters

ParameterType
paramsCustomFrameHandlerParams

Returns

void


CustomFrameHandlerFactory

type CustomFrameHandlerFactory = () => CustomFrameHandler;

Creates the per-device CustomFrameHandler.

Returns

CustomFrameHandler


CustomMeasurement

type CustomMeasurement =
  | BloodPressureMeasurement
  | BodyWeightMeasurement
  | BodyTemperatureMeasurement
  | BloodGlucoseMeasurement
  | PulseOximeterMeasurement
  | HeartRateMeasurement
  | EcgMeasurement
  | RespiratoryRateMeasurement
  | UrineAnalyzeMeasurement;

The measurement shapes a custom-device declaration may report. Its decoder fields are checked against the measurement catalog at registration, so this union can preserve the same measurementTypeKey discrimination as results from built-in devices.


CustomReadingDecorator

type CustomReadingDecorator = (reading, frame?, recordOffset?) => MeasurementWithCaseType<Measurement> | null;

Adds metadata to a validated reading; null withholds it, for a frame that is not a patient reading.

Parameters

ParameterType
readingMeasurementWithCaseType<Measurement>
frame?readonly string[]
recordOffset?number

Returns

MeasurementWithCaseType<Measurement> | null


CustomSequencerFactory

type CustomSequencerFactory = (context) => CommandSequencer;

Creates the command sequencer of one connection, for a declaration whose commands depend on the device or on stored state.

Parameters

ParameterType
contextCustomSequencerContext

Returns

CommandSequencer


DeviceConnectionEventKind

type DeviceConnectionEventKind =
  | "pairing"
  | "connected"
  | "bonded"
  | "history-download"
  | "battery"
  | "device-identified"
  | "clock-synchronized"
  | "recording";

Kind of connection lifecycle event.


DeviceData

type DeviceData = object;

Identity and capabilities of a discovered or connected device.

Properties

clockSync?
clockSync?: ClockSyncCapability;

Whether the device clock can be synchronised.

hardwareAddress?
hardwareAddress?: string;

Device-reported address (available after identity); bind per patient and never log.

id
id: string;

Platform identifier of the peripheral.

localName
localName: string;

Name the peripheral advertises.

manufacturerData
manufacturerData: string;

Advertised manufacturer data.

manufacturerName?
manufacturerName?: string;

Manufacturer name reported by the device.

measurementTypes
measurementTypes: MeasurementTypeKey[];

What the connected parser measures, set when the connection starts.

model?
model?: string;

Model reported by the device.

name
name: DeviceKey;

Integrated or custom device the peripheral was matched to.

sn
sn: string;

Serial number reported by the device.

variant?
variant?: object;

The brand and model the advertised name identified, when a parser serves several products.

manufacturer
manufacturer: string;

Brand the advertised name identified.

model
model: string;

Model the advertised name identified.


DeviceKey

type DeviceKey =
  | IntegratedDevices
  | CustomDeviceId;

Anything the SDK can report as deviceData.name: a built-in device, or a declared one.


DeviceKeyOf

type DeviceKeyOf<T> = KeyOfAccepted<T[number]>;

The device keys an acceptedDevices list can report.

Type Parameters

Type Parameter
T extends readonly AcceptedDevice[]

DeviceVariant

type DeviceVariant = object;

One brand and model that a built-in parser or a Bluetooth SIG profile decodes.

A built-in parser finds the product by nameMatch, so it is required there. A SIG profile finds it by service, and nameMatch only names it; a row without one is listed in the catalog but never labels a connected device.

Properties

device
device:
  | IntegratedDevices
  | StandardProfileId;

The built-in parser or SIG profile that decodes the product.

manufacturer
manufacturer: string;

Manufacturer of the product.

model
model: string;

The product name; also the name of its SUPPORTED_DEVICES entry.

nameMatch?
nameMatch?: RegExp;

Matches the advertised name of the product.


GlucoseReportedUnit

type GlucoseReportedUnit = "mg/dL" | "mmol/L";

The unit the meter displayed the concentration in.


GlucoseSampleLocation

type GlucoseSampleLocation = "finger" | "alternateSite" | "earlobe";

Where on the body the sample was taken.


GlucoseSensorWarning

type GlucoseSensorWarning = "batteryLow" | "temperatureTooHigh" | "temperatureTooLow" | "timeFault";

A condition the meter flagged on a record that does not make its value unusable.


GlucoseSpecimenType

type GlucoseSpecimenType =
  | "capillaryWholeBlood"
  | "capillaryPlasma"
  | "venousWholeBlood"
  | "venousPlasma"
  | "arterialWholeBlood"
  | "arterialPlasma"
  | "undeterminedWholeBlood"
  | "undeterminedPlasma"
  | "interstitialFluid";

What a glucose sample was taken from. Control-solution tests are never reported.


LepuCommandValue

type LepuCommandValue = typeof LepuCommand[keyof typeof LepuCommand];

Any Lepu command code.


LepuTransportName

type LepuTransportName = keyof typeof lepuTransports;

Name of a transport group in lepuTransports.


MeasurementFeedbackKey

type MeasurementFeedbackKey = typeof MeasurementFeedbackKey[keyof typeof MeasurementFeedbackKey];

The translation keys a failed measurement reports, as BluetoothError.translationKey (and its message): compare against these rather than the strings, and translate them in the app.


MeasurementForDevice

type MeasurementForDevice<K> = K extends IntegratedDevices ? DeviceMeasurementMap[K] : CustomMeasurement;

A built-in device has a measurement type the SDK knows statically. A device registered through defineCustomDevice reports the catalog-checked properties its declaration named.

Type Parameters

Type Parameter
K extends DeviceKey

MeasurementTypeForDevices

type MeasurementTypeForDevices<T> = MeasurementForDevice<T[number]> & object;

Measurement shape reported by any of the given devices, tagged with its case type.

Type Parameters

Type Parameter
T extends readonly DeviceKey[]

Type Declaration

NameTypeDescription
caseTypeCaseTypeFrame case the measurement was decoded from.

NearbyDevice

type NearbyDevice = DeviceData;

Identity of a nearby device.


NearbyDeviceOfferStatus

type NearbyDeviceOfferStatus = "idle" | "offered" | "pairing" | "paired" | "error";

Where a nearby device offer is in its lifecycle.


RecordedFrameSink

type RecordedFrameSink = (frame) => void | Promise<void>;

Receives each frame as it is replayed.

Parameters

ParameterType
frameRecordedBleFrame

Returns

void | Promise<void>


ResultCallbackData

type ResultCallbackData<T> = OmitCaseType<MeasurementTypeForDevices<[T]>>;

Measurement payload for the given device, without its case type.

Type Parameters

Type Parameter
T extends DeviceKey

ResultPolicy

type ResultPolicy =
  | "all"
  | "daily-totals-only"
  | "first-reading-per-kind-per-connection"
  | "series";

Rule deciding which readings of a device are reported.


ResultPolicyByMeasurement

type ResultPolicyByMeasurement = Partial<Record<MeasurementTypeKey, ResultPolicy>>;

Result policy per measurement type.


RuntimeBluetoothState

type RuntimeBluetoothState = "unknown" | "on" | "off" | "unauthorized" | "unsupported";

Bluetooth adapter state; unknown until first reported.


RuntimeConnectionEvent

type RuntimeConnectionEvent = DeviceConnectionEvent;

Connection lifecycle event reported by the Bluetooth runtime.


RuntimeError

type RuntimeError = ErrorCallback;

Error reported by the Bluetooth runtime.


RuntimeEvent

type RuntimeEvent = keyof RuntimeEventMap;

Name of an event the runtime emits.


RuntimeResult

type RuntimeResult = ResultCallback<DeviceKey>;

Typed union exposed when a host listens to every accepted device.


StandardProfileId

type StandardProfileId =
  | "standard-blood-pressure"
  | "standard-blood-glucose"
  | "standard-body-temperature"
  | "standard-heart-rate"
  | "standard-body-weight"
  | "standard-blood-oxygen-pulse-rate";

The id of a Bluetooth SIG profile declaration, standard-<measurement type>.


VerovalBloodPressureReading

type VerovalBloodPressureReading = MeasurementWithCaseType<Measurement> & object;

A blood pressure reading with the flags a Veroval monitor reports.

Type Declaration

NameTypeDescription
atrialFibrillation?booleanThe device flagged atrial fibrillation during the reading.
restingMeasurement?booleanThe device flagged the reading as taken in its resting mode.
tripleMeasurement?booleanThe device flagged the reading as part of a triple measurement.

VerovalDuoControlMeasurement

type VerovalDuoControlMeasurement = BloodPressureMeasurement & object;

A blood pressure reading from a Duo Control monitor.

Type Declaration

NameTypeDescription
irregularHeartbeat?booleanWhether the monitor marked the reading as an irregular heartbeat.
memorySlot1 | 2Memory slot (user) the monitor stored the reading in.
recordedAtDateThe timestamp stored in the monitor, rather than the download time.

Enumerations

BluetoothErrorCode

Stable machine-readable codes for Bluetooth failures.

Enumeration Members

Enumeration MemberValueDescription
BACKGROUND_SYNC"bluetooth.background-sync"Background synchronisation failed.
CONNECTION_FAILED"bluetooth.connection-failed"Connecting to or staying connected to the device failed.
DEVICE_ERROR"bluetooth.device-error"The device reported an error.
DISCOVERY_FAILED"bluetooth.discovery-failed"Service or characteristic discovery failed.
FRAME_INVALID"bluetooth.frame-invalid"A received frame was malformed or failed its checksum.
MEASUREMENT_FAILED"bluetooth.measurement-failed"The measurement did not complete.
PAIRING_REQUIRED"bluetooth.pairing-required"The device requires pairing, bonding or authentication.
PERMISSION_DENIED"bluetooth.permission-denied"Bluetooth permission was denied or not granted.
POWERED_OFF"bluetooth.powered-off"Bluetooth is turned off.
SCAN_FAILED"bluetooth.scan-failed"Scanning for devices failed.
UNKNOWN"bluetooth.unknown"The failure could not be classified.
UNSUPPORTED"bluetooth.unsupported"Bluetooth is not supported on this device.

DeviceStatus

Connection and measurement state of a device.

Enumeration Members

Enumeration MemberValueDescription
CONNECTED"Connected"The device is connected.
DISCONNECTED"Disconnected"The device is disconnected.
LOW_BATTERY"LowBattery"The device reported a low battery.
MEASURING"Measuring"The device is taking a measurement.

IntegratedDevices

Bluetooth devices the SDK ships support for; each value is the device name.

Enumeration Members

Enumeration MemberValueDescription
ALIVE_COR"alivecor"Device advertised as "alivecor".
AND_BPM"A&D BPM"Device advertised as "A&D BPM".
AND_BPM_CTS"A&D BPM CTS"Device advertised as "A&D BPM CTS".
AND_SCALE"A&D Scale"Device advertised as "A&D Scale".
ANDESFITTEMP"TEMP"Device advertised as "TEMP".
AOJ_70B"AOJ-70B"Device advertised as "AOJ-70B".
AOJ_BPM"AOJ BPM"Device advertised as "AOJ BPM".
AOJ_BPM_FFF0"AOJ BPM FFF0"Device advertised as "AOJ BPM FFF0".
AOJ20A"AOJ-20A"Device advertised as "AOJ-20A".
AP20"AP-20"Device advertised as "AP-20".
AP20_WPS"AP-20-WPS"Device advertised as "AP-20-WPS".
BBSM_S3"BBSM S3"Device advertised as "BBSM S3".
BC01"BC01"Device advertised as "BC01".
BGM"BGM"Device advertised as "BGM".
BIOLAND_BGM"Bioland-BGM"Device advertised as "Bioland-BGM".
BP2"BP2"Device advertised as "BP2".
BPM188"BPM-188"Device advertised as "BPM-188".
BPW1"BPW1"Device advertised as "BPW1".
CHECKME"Checkme"Device advertised as "Checkme".
CHECKME_EX"Checkme EX"Device advertised as "Checkme EX".
CHECKME_LE"CheckmeLE"Device advertised as "CheckmeLE".
CHECKME_POD"Checkme Pod"Device advertised as "Checkme Pod".
CHECKME_POD_WPS"Checkme Pod-WPS"Device advertised as "Checkme Pod-WPS".
CLEVERTEMP"TAIDOC TD1107"Device advertised as "TAIDOC TD1107".
CMED"cmed"Device advertised as "cmed".
COFOE_BPM"Cofoe BPM"Device advertised as "Cofoe BPM".
COFOE_BPM_HISTORY"Cofoe BPM History"Device advertised as "Cofoe BPM History".
COFOE_GLUCOMETER"Cofoe Glucometer"Device advertised as "Cofoe Glucometer".
COFOE_GLUCOMETER_CGH25"Cofoe Glucometer CGH25"Device advertised as "Cofoe Glucometer CGH25".
COFOE_THERMOMETER"Cofoe Thermometer"Device advertised as "Cofoe Thermometer".
COSINUSS"two"Device advertised as "two".
F4"F4"Device advertised as "F4".
FAMIDOC_BPM"Famidoc BPM"Device advertised as "Famidoc BPM".
FAMIDOC_CONTACT_THERMOMETER"Famidoc Contact Thermometer"Device advertised as "Famidoc Contact Thermometer".
FAMIDOC_IR_THERMOMETER"Famidoc IR Thermometer"Device advertised as "Famidoc IR Thermometer".
FORA_SCALE"FORA W550"Device advertised as "FORA W550".
FORATEMP"FORA IR20"Device advertised as "FORA IR20".
GENIAL_T31"Genial-T31"Device advertised as "Genial-T31".
GLUCOCHECK"GlucoCheck"Device advertised as "GlucoCheck".
JOYTECH_BPM"Joytech BPM"Device advertised as "Joytech BPM".
JOYTECH_THERMOMETER"Joytech Thermometer"Device advertised as "Joytech Thermometer".
JUMPER_BPM"Jumper BPM"Device advertised as "Jumper BPM".
JUMPER_OXIMETER"Jumper Oximeter"Device advertised as "Jumper Oximeter".
JUMPER_THERMOMETER"Jumper Thermometer"Device advertised as "Jumper Thermometer".
LEPU_F4_SCALE"Lepu F4 scale"Device advertised as "Lepu F4 scale".
LEPU_F5_SCALE"Lepu F5 scale"Device advertised as "Lepu F5 scale".
LPM311"LPM311"Device advertised as "LPM311".
MAMBO_A5"Mambo A5"Device advertised as "Mambo A5".
MYSENSE"mySense"Device advertised as "mySense".
PC100"PC-100"Device advertised as "PC-100".
PC300"PC300"Device advertised as "PC300".
PC60WF"OxySmart"Device advertised as "OxySmart".
PC68B"PC-68B"Device advertised as "PC-68B".
PC80B"PC80B"Device advertised as "PC80B".
PF10AW_ME"PF10AW-ME"Device advertised as "PF10AW-ME".
PF10BW_VE"PF10BW-VE"Device advertised as "PF10BW-VE".
PM10"PM10"Device advertised as "PM10".
POCTOR_M3102"PoctorM3102"Device advertised as "PoctorM3102".
PULSEBIT_EX"Pulsebit EX"Device advertised as "Pulsebit EX".
RPM_SCALE"GBS-2012-B"Device advertised as "GBS-2012-B".
S5"Le S5"Device advertised as "Le S5".
SA10AW_PU"SA10AW-PU"Device advertised as "SA10AW-PU".
SP_20"SP-20"Device advertised as "SP-20".
SP_20_BLE"SP-20-BLE"Device advertised as "SP-20-BLE".
SP_20_WPS"SP-20-WPS"Device advertised as "SP-20-WPS".
SP80B"PULMO80B"Device advertised as "PULMO80B".
SPO2"Oxyfit"Device advertised as "Oxyfit".
TAIDOC_BPM"TaiDoc BPM"Device advertised as "TaiDoc BPM".
TAIDOC_GLUCOSE"TAIDOC TD4216"Device advertised as "TAIDOC TD4216".
TAIDOC_MULTI"TaiDoc Multi"Device advertised as "TaiDoc Multi".
TAIDOC_OXIMETER"TaiDoc Oximeter"Device advertised as "TaiDoc Oximeter".
TAIDOC_SCALE"TaiDoc Scale"Device advertised as "TaiDoc Scale".
TAIDOC_THERMOMETER"TaiDoc Thermometer"Device advertised as "TaiDoc Thermometer".
TRANSTEK_A6_BPM"Transtek A6 BPM"Device advertised as "Transtek A6 BPM".
TRANSTEK_BPM"Transtek BPM"Device advertised as "Transtek BPM".
TRANSTEK_SCALE"Transtek Scale"Device advertised as "Transtek Scale".
TRANSTEK_SCALE_1525"Transtek Scale 1525"Device advertised as "Transtek Scale 1525".
TRANSTEK_TRACKER"Transtek Tracker"Device advertised as "Transtek Tracker".
TRASENSE_S9"Trasense S9"Device advertised as "Trasense S9".
VEROVAL_ACTIVITY"Veroval Activity"Device advertised as "Veroval Activity".
VEROVAL_DUO_CONTROL"Veroval duo control"Device advertised as "Veroval duo control".
VEROVAL_ECG"Veroval ECG"Device advertised as "Veroval ECG".
VIATOM_BBSM_BS1"BBSM BS1"Device advertised as "BBSM BS1".
VIATOM_R20"R20"Device advertised as "R20".
VIATOM_R200"R200"Device advertised as "R200".
WBP_02"WBP-02"Device advertised as "WBP-02".
YONKER_80B"Yonker 80B"Device advertised as "Yonker 80B".
YONKER_BPM"Yonker BPM"Device advertised as "Yonker BPM".
YONKER_OXIMETER"Yonker Oximeter"Device advertised as "Yonker Oximeter".
YONKER_SCALE"Yonker Scale"Device advertised as "Yonker Scale".
YONKER_THERMOMETER"Yonker Thermometer"Device advertised as "Yonker Thermometer".
ZH_SG_A606"ZH-SG-A606"Device advertised as "ZH-SG-A606".

Variables

A606_NOTIFY

const A606_NOTIFY: "0000ff02-0000-1000-8000-00805f9b34fb" = "0000ff02-0000-1000-8000-00805f9b34fb";

Characteristic UUID that replies are notified on.


A606_SERVICE

const A606_SERVICE: "0000ff00-0000-1000-8000-00805f9b34fb" = "0000ff00-0000-1000-8000-00805f9b34fb";

GATT service UUID of the A606.


A606_WRITE

const A606_WRITE: "0000ff01-0000-1000-8000-00805f9b34fb" = "0000ff01-0000-1000-8000-00805f9b34fb";

Characteristic UUID that commands are written to.


a606MainServices

const a606MainServices: IService[];

ZH-SG's fixed GATT profile and its 16-byte stored glucose record.


AOJ_COMMAND

const AOJ_COMMAND: object;

Command opcodes sent to AOJ devices.

Type Declaration

NameTypeDefault valueDescription
CLEAR_HISTORY2120xd4Clears the stored history.
GET_HISTORY2110xd3Requests the stored history.
GET_INFO2130xd5Requests device information.
SET_TIME2100xd2Sets the device clock.

AOJ_RESPONSE

const AOJ_RESPONSE: object;

Response opcodes sent by AOJ devices.

Type Declaration

NameTypeDefault valueDescription
CLEAR_HISTORY1960xc4Reply to a history clear.
GET_INFO1970xc5Reply to an information request.
HISTORY1950xc3A stored history record.
SET_TIME1940xc2Reply to a clock set.

aojMainServices

const aojMainServices: IService[];

The GATT service AOJ devices are monitored and written through.


BOSO_MEDICUS_NAME_MATCH

const BOSO_MEDICUS_NAME_MATCH: RegExp;

The boso medicus system uses the Bluetooth SIG Blood Pressure Service and Measurement characteristic. Its vendor-specific identity is the advertised name, which carries a six-character hexadecimal suffix, for example boso medicus 312B5D.


BP3_MODEL_NAMES

const BP3_MODEL_NAMES: readonly string[];

The names the BP3 range advertises.

Seventeen products differing in cuff, casing, or display rather than in protocol, so declaring the range is one line per name:

const bp3Devices = BP3_MODEL_NAMES.map((name) =>
  viatomBpMonitor(name, { id: `viatom-${name.toLowerCase()}` }),
);

CHECKME_NOTIFY

const CHECKME_NOTIFY: "0734594a-a8e7-4b1a-a6b1-cd5243059a57" = "0734594a-a8e7-4b1a-a6b1-cd5243059a57";

Characteristic UUID that responses are notified on.


CHECKME_SERVICE

const CHECKME_SERVICE: "14839ac4-7d7e-415c-9a42-167340cf2339" = "14839ac4-7d7e-415c-9a42-167340cf2339";

GATT service UUID of Checkme devices.


CHECKME_WRITE

const CHECKME_WRITE: "8b00ace7-eb0b-49b0-bbe9-9aee0a26e1a3" = "8b00ace7-eb0b-49b0-bbe9-9aee0a26e1a3";

Characteristic UUID that commands are written to.


CheckmeCommand

const CheckmeCommand: object;

Command codes of the Checkme protocol.

Type Declaration

NameTypeDefault valueDescription
info200x14Requests device information.
ping210x15Keep-alive ping.
readContent40x04Reads the next chunk of the open file.
readEnd50x05Closes the open file.
readStart30x03Opens a file for reading.
syncParameters220x16Synchronises device parameters such as the clock.

CheckmeListType

const CheckmeListType: object;

File list identifiers that can be read from a Checkme device.

Type Declaration

NameTypeDefault valueDescription
bloodPressure33Blood pressure records.
daily00Daily check records.
ecg11ECG records.
oxygen22Blood oxygen records.
temperature55Temperature records.
user88User profile list.

checkmeMainServices

const checkmeMainServices: IService[];

The GATT service Checkme devices are monitored through.


CheckmePodCommand

const CheckmePodCommand: object;

Command codes of the Checkme Pod protocol.

Type Declaration

NameTypeDefault valueDescription
info200x14Requests device information.
realtimeData320x20Requests the realtime reading.
syncParameters220x16Synchronises device parameters such as the clock.

checkmePodMainServices

const checkmePodMainServices: IService[];

The GATT service Checkme Pod devices are monitored and written through.


DEFAULT_CALIBRATION

const DEFAULT_CALIBRATION: object;

The calibration the recording is read with.

This is the EDF convention - a linear map from counts onto a physical range - and the device states its own in the header it sends before the curve. These are the values the vendor's app falls back to, and are what the SDK uses until a header supplies otherwise: the full signed sixteen-bit range spans plus or minus 27.68 mV.

Type Declaration

NameTypeDefault valueDescription
digitalMaximum3276732_767Highest digital sample value.
digitalMinimum-32768-32_768Lowest digital sample value.
physicalMaximumMicrovolts2768027_680Physical value of the highest digital sample, in microvolts.
physicalMinimumMicrovolts-27680-27_680Physical value of the lowest digital sample, in microvolts.

DEFAULT_PAIRED_DEVICE_STORAGE_KEY

const DEFAULT_PAIRED_DEVICE_STORAGE_KEY: "@ovok/native/paired-devices" = "@ovok/native/paired-devices";

Storage key used when none is given.


DEFAULT_QUEUE_KEY

const DEFAULT_QUEUE_KEY: "@ovok/native/background-sync/results" = "@ovok/native/background-sync/results";

Default storage key of the queue.


DEFAULT_RESTORE_STATE_IDENTIFIER

const DEFAULT_RESTORE_STATE_IDENTIFIER: "com.ovok.native.background-sync" = "com.ovok.native.background-sync";

Default CoreBluetooth state restoration identifier.


DEVICE_VARIANTS

const DEVICE_VARIANTS: readonly DeviceVariant[];

Every known brand and model variant, in lookup order.


ER1_MODEL_NAMES

const ER1_MODEL_NAMES: readonly string[];

The names the ER1 recorders advertise.


ER2_MODEL_NAMES

const ER2_MODEL_NAMES: readonly string[];

The names the ER2 recorders advertise, all of them on the small-MTU link.


ER3_MODEL_NAMES

const ER3_MODEL_NAMES: readonly string[];

The ER3 family is identified separately from the ER1/ER2 opcode family.


GENIAL_T31_CID_ACK

const GENIAL_T31_CID_ACK: string[];

Frame that acknowledges the device's identification.


GENIAL_T31_CONNECT

const GENIAL_T31_CONNECT: string[];

Frame that opens the session.


GENIAL_T31_NOTIFY

const GENIAL_T31_NOTIFY: "0000fff1-0000-1000-8000-00805f9b34fb" = "0000fff1-0000-1000-8000-00805f9b34fb";

Characteristic UUID that readings are notified on.


GENIAL_T31_SERVICE

const GENIAL_T31_SERVICE: "00001809-0000-1000-8000-00805f9b34fb" = "00001809-0000-1000-8000-00805f9b34fb";

GATT service UUID of the Genial T31.


GENIAL_T31_WRITE

const GENIAL_T31_WRITE: "0000fff2-0000-1000-8000-00805f9b34fb" = "0000fff2-0000-1000-8000-00805f9b34fb";

Characteristic UUID that commands are written to.


genialT31MainServices

const genialT31MainServices: IService[];

The GATT service the Genial T31 is monitored and written through.


LEPOD_MODEL_NAMES

const LEPOD_MODEL_NAMES: readonly string[];

The names the Lepod range advertises.


LEPU_CATALOG_EXCLUDED_DEVICE_NAMES

const LEPU_CATALOG_EXCLUDED_DEVICE_NAMES: readonly string[];

Fetal-doppler and massager names from the vendor vocabulary, kept out of the SDK catalog.


LEPU_CATALOG_HIDDEN_DEVICE_NAMES

const LEPU_CATALOG_HIDDEN_DEVICE_NAMES: readonly string[];

Advertisement aliases that identify a product but are not customer-facing model names.


LEPU_DEVICE_NAMES

const LEPU_DEVICE_NAMES: readonly string[];

The names the Lepu/Viatom family advertises, as its own SDK matches them.

Taken from the vendor's getDeviceModel, a 732-line cascade of substring checks that is the whole of how that SDK decides which product it is talking to. The order there matters, because 27 of these names are a prefix of another - BP2 of BP2A, BP2T, BP2W and three more - so a check that ran in the wrong order would bind a BP2W as a BP2 and poll it with an opcode written for different hardware.

It is that function's vocabulary, not a catalogue of everything the vendor sells: a few products - the ER3 and the M12 among them - are identified elsewhere in that app and never reach this list. The first-word names below are compared against the complete first token of the advertisement, not as an open-ended prefix: O2 must not claim O2Ring, and BabyO2 must not claim BabyO2N.

They are held here as a flat vocabulary rather than an ordered cascade, because lepuNameMatch derives the exclusions from the list itself. Adding a name automatically narrows every name it extends, which an ordered list would leave to whoever inserted it.


LEPU_FIRST_WORD_DEVICE_NAMES

const LEPU_FIRST_WORD_DEVICE_NAMES: readonly string[];

Names the vendor matches by the complete first word of the advertisement.


LepuCommand

const LepuCommand: object;

The commands every Lepu device understands.

These are the generic opcodes, shared across the whole family. Device-specific opcodes live below 0x40 and belong with their driver, because the same number means different things on different hardware - 0x08 polls realtime data on a BP2 and starts a measurement on others. That collision is why this module holds only the opcodes that are genuinely common, and why a driver must never assume a low opcode is safe to send to an unidentified device.

Type Declaration

NameTypeDefault valueDescription
ECHO2240xe0Link keepalive and round-trip test. Inert.
GET_BATTERY2280xe4Reads the battery level.
GET_FILE_LIST2410xf1Enumerate the records stored on the device.
GET_INFO2250xe1Device information, including the model string. Inert and identical family-wide, which makes it the one command safe to send before a device has been identified - and therefore the way to confirm what something is before addressing it with an opcode that means something else on the wrong hardware.
READ_FILE_DATA2430xf3Fetch the next chunk of the file being read.
READ_FILE_END2440xf4End the read and release the device's file handle.
READ_FILE_START2420xf2Begin a read: a 20-byte payload of file name plus a 32-bit offset.
SET_TIME2360xecSets the device's local wall clock before history is requested.

LepuResponseType

const LepuResponseType: object;

What a Lepu device says about the request it just answered.

Only SUCCESS means the payload holds what was asked for. Every other value is an error whose payload is not the requested data, so a reply has to be checked before it is decoded - otherwise a refusal is read as a reading, out of whatever bytes happen to follow the header.

Type Declaration

NameTypeDefault valueDescription
COMMAND_FORMAT_ERROR2520xfcThe command was malformed.
COMMAND_NOT_SUPPORTED2530xfdThe opcode is unknown to this firmware, which is how a feature is detected.
CRC_ERROR20x02The device rejected our checksum.
DECRYPT_FAILED2430xf3The device could not decrypt the request.
DEVICE_BUSY2510xfbMid-measurement or otherwise occupied. Worth backing off rather than giving up.
ERROR2550xffA generic error.
FILE_NOT_FOUND2240xe0The requested file does not exist.
FILE_READ_FAILED2250xe1The file could not be read.
FILE_WRITE_FAILED2260xe2The file could not be written.
PARAMETER_ILLEGAL2410xf1The request parameter was rejected.
PERMISSION_DENIED2420xf2The device denied permission.
REQUEST00x00A request, phone to device. Never seen on a reply.
SUCCESS10x01The request succeeded; the payload holds the requested data.

lepuTransports

const lepuTransports: object;

The characteristics each group of products exposes, read from the vendor's own managers.

standard and aw1 match the vendor's published SDK reference exactly, and standard also matches the SDK's existing BP2 driver, which has run against hardware on precisely these UUIDs. ding and aiTele were read from an OEM build and the vendor documents no product on them, so they are the two entries here that nothing independent confirms.

Type Declaration

NameTypeDefault valueDescription
aiTeleobject-OEM-build characteristics that the vendor does not document.
aiTele.notifyUuid"00002760-08c2-11e1-9073-0e8ac72e5402"AI_TELE_NOTIFYCharacteristic UUID that notifications arrive on.
aiTele.preferredMtu247PREFERRED_MTUMTU to request once connected.
aiTele.serviceUuid"00002760-08c2-11e1-9073-0e8ac72e5450"AI_TELE_SERVICEGATT service UUID.
aiTele.writeUuid"00002760-08c2-11e1-9073-0e8ac72e5401"AI_TELE_WRITECharacteristic UUID that commands are written to.
aw1object-The characteristics of O2Ring S, the PF-10 wearables and the BBSM bands.
aw1.notifyUuid"e8fb0003-a14b-98f9-831b-4e2941d01248"AW1_NOTIFYCharacteristic UUID that notifications arrive on.
aw1.preferredMtu247PREFERRED_MTUMTU to request once connected.
aw1.serviceUuid"e8fb0001-a14b-98f9-831b-4e2941d01248"AW1_SERVICEGATT service UUID.
aw1.writeUuid"e8fb0002-a14b-98f9-831b-4e2941d01248"AW1_WRITECharacteristic UUID that commands are written to.
dingobject-OEM-build characteristics that the vendor does not document.
ding.notifyUuid"0000fe62-0000-1000-8000-00805f9b34fb"DING_NOTIFYCharacteristic UUID that notifications arrive on.
ding.preferredMtu247PREFERRED_MTUMTU to request once connected.
ding.serviceUuid"0000fe60-0000-1000-8000-00805f9b34fb"DING_SERVICEGATT service UUID.
ding.writeUuid"0000fe61-0000-1000-8000-00805f9b34fb"DING_WRITECharacteristic UUID that commands are written to.
standardobject-The characteristics nearly every product in the family exposes.
standard.notifyUuid"0734594a-a8e7-4b1a-a6b1-cd5243059a57"STANDARD_NOTIFYCharacteristic UUID that notifications arrive on.
standard.preferredMtu247PREFERRED_MTUMTU to request once connected.
standard.serviceUuid"14839ac4-7d7e-415c-9a42-167340cf2339"STANDARD_SERVICEGATT service UUID.
standard.writeUuid"8b00ace7-eb0b-49b0-bbe9-9aee0a26e1a3"STANDARD_WRITECharacteristic UUID that commands are written to.
standardSmallMtuobject-The same characteristics on a link that will not grow past the minimum.
standardSmallMtu.notifyUuid"0734594a-a8e7-4b1a-a6b1-cd5243059a57"STANDARD_NOTIFYCharacteristic UUID that notifications arrive on.
standardSmallMtu.preferredMtu23MINIMUM_MTUMTU to request once connected.
standardSmallMtu.serviceUuid"14839ac4-7d7e-415c-9a42-167340cf2339"STANDARD_SERVICEGATT service UUID.
standardSmallMtu.writeUuid"8b00ace7-eb0b-49b0-bbe9-9aee0a26e1a3"STANDARD_WRITECharacteristic UUID that commands are written to.

MeasurementFeedbackKey

const MeasurementFeedbackKey: object;

The translation keys a failed measurement reports, as BluetoothError.translationKey (and its message): compare against these rather than the strings, and translate them in the app.

Type Declaration

NameTypeDefault valueDescription
COMMAND_TIMEOUT"feedback-messages.measurement.command-timeout""feedback-messages.measurement.command-timeout"The device did not answer a command in time.
CORRUPT_FRAME"feedback-messages.measurement.corrupt-frame-error""feedback-messages.measurement.corrupt-frame-error"A frame from the device was corrupt.
DEVICE_ERROR"feedback-messages.measurement.device-error""feedback-messages.measurement.device-error"The device reported an error.
DEVICE_INTERRUPTED"feedback-messages.measurement.device-interrupted""feedback-messages.measurement.device-interrupted"The measurement was interrupted.
DISTURB_DETECTED"feedback-messages.measurement.disturb-detected-error""feedback-messages.measurement.disturb-detected-error"Movement or interference disturbed the measurement.
INSUFFICIENT_DATA_LENGTH"feedback-messages.measurement.insufficient-data-length""feedback-messages.measurement.insufficient-data-length"A frame was too short to decode.
LEAD_OFF"feedback-messages.measurement.lead-off-error""feedback-messages.measurement.lead-off-error"An ECG lead was not in contact.
LOOSE_SLEEVE"feedback-messages.measurement.loose-sleeve-error""feedback-messages.measurement.loose-sleeve-error"The cuff sleeve was loose.
POOR_WAVEFORM"feedback-messages.measurement.poor-waveform-error""feedback-messages.measurement.poor-waveform-error"The waveform quality was too poor.
STUCK"feedback-messages.measurement.stuck-error""feedback-messages.measurement.stuck-error"The device stopped sending mid-measurement (or mid-transfer, after a reading already arrived).
WEAK_SIGNAL"feedback-messages.measurement.weak-signal-error""feedback-messages.measurement.weak-signal-error"The signal was too weak to measure.

measurementFieldCatalog

const measurementFieldCatalog: Readonly<Partial<Record<MeasurementTypeKey, Readonly<Record<string, CatalogField>>>>>;

The catalog of declarable properties per measurement type.


TMB_MODEL_NAMES

const TMB_MODEL_NAMES: readonly string[];

Advertised names of the TMB blood pressure monitors.


TRASENSE_S9_NOTIFY

const TRASENSE_S9_NOTIFY: "0000fff2-0000-1000-8000-00805f9b34fb" = "0000fff2-0000-1000-8000-00805f9b34fb";

Characteristic UUID that replies are notified on.


TRASENSE_S9_SERVICE

const TRASENSE_S9_SERVICE: "0000fff0-0000-1000-8000-00805f9b34fb" = "0000fff0-0000-1000-8000-00805f9b34fb";

GATT service UUID of the Trasense S9.


TRASENSE_S9_WRITE

const TRASENSE_S9_WRITE: "0000fff1-0000-1000-8000-00805f9b34fb" = "0000fff1-0000-1000-8000-00805f9b34fb";

Characteristic UUID that commands are written to.


VEROVAL_ACTIVITY_BOND_WRITE

const VEROVAL_ACTIVITY_BOND_WRITE: "2610fc01-494d-494c-4544-55544954414c" = "2610fc01-494d-494c-4544-55544954414c";

Characteristic UUID written to when bonding.


VEROVAL_ACTIVITY_NOTIFY

const VEROVAL_ACTIVITY_NOTIFY: "2610fc03-494d-494c-4544-55544954414c" = "2610fc03-494d-494c-4544-55544954414c";

Characteristic UUID that replies are notified on.


VEROVAL_ACTIVITY_SECONDARY_NOTIFY

const VEROVAL_ACTIVITY_SECONDARY_NOTIFY: "2610fc04-494d-494c-4544-55544954414c" = "2610fc04-494d-494c-4544-55544954414c";

Second characteristic UUID that replies are notified on.


VEROVAL_ACTIVITY_SERVICE

const VEROVAL_ACTIVITY_SERVICE: "2610fc00-494d-494c-4544-55544954414c" = "2610fc00-494d-494c-4544-55544954414c";

GATT service UUID of the Veroval activity tracker.


VEROVAL_ACTIVITY_WRITE

const VEROVAL_ACTIVITY_WRITE: "2610fc02-494d-494c-4544-55544954414c" = "2610fc02-494d-494c-4544-55544954414c";

Characteristic UUID that commands are written to.


VEROVAL_BP_MODEL_NAMES

const VEROVAL_BP_MODEL_NAMES: readonly string[];

The names these monitors advertise.


VEROVAL_ECG_SAMPLE_RATE_HZ

const VEROVAL_ECG_SAMPLE_RATE_HZ: 128 = 128;

How fast the device samples.

Not taken on trust: the vendor's own plotting step works out to two two-hundred-and-fifty sixths of a second, and its transfer is thirty-four segments of sixteen packets of sixteen bytes - which is 256 bytes, 128 samples, one second per segment. Both say 128 Hz.


VEROVAL_FUSION_NAME_MATCH

const VEROVAL_FUSION_NAME_MATCH: RegExp;

The exact advertised name used by the Veroval fusion monitor.


VIATOM_ECG_MILLIVOLTS_PER_COUNT

const VIATOM_ECG_MILLIVOLTS_PER_COUNT: 0.002467 = 0.002467;

Millivolts represented by one sample count.


VIATOM_ECG_SAMPLE_RATE_HZ

const VIATOM_ECG_SAMPLE_RATE_HZ: 125 = 125;

ECG sample rate in hertz.


VIATOM_OXIMETER_NAMES

const VIATOM_OXIMETER_NAMES: readonly string[];

The names the oximeter range advertises.

const oximeters = VIATOM_OXIMETER_NAMES.map((name) =>
  viatomOximeter(name, { id: `viatom-${name.toLowerCase()}` }),
);

VIATOM_OXYII_NAMES

const VIATOM_OXYII_NAMES: readonly string[];

ViHealth models handled by its dedicated OxyII/AW1 transport.

These are selected by the vendor's model-to-interface switch rather than by the legacy O2 interface used by the rest of this file.


VISOMAT_COMFORT_SOFT_BT_NAME_MATCH

const VISOMAT_COMFORT_SOFT_BT_NAME_MATCH: RegExp;

The product name used by the visomat comfort soft BT monitor while advertising.

References

CHECKME_POD_NOTIFY

Renames and re-exports CHECKME_NOTIFY


CHECKME_POD_SERVICE

Renames and re-exports CHECKME_SERVICE


CHECKME_POD_WRITE

Renames and re-exports CHECKME_WRITE

Last updated on

On this page

ComponentsBluetoothDevicePicker()ParametersReturnsBluetoothRuntimeProvider()ParametersReturnsBTProvider()Type ParametersParametersReturnsDefaultPermissionFallback()ParametersReturnsHooksuseBackgroundSync()ParametersReturnsuseBluetoothPermission()ParametersReturnsuseBluetoothRuntime()ReturnsThrowsuseBluetoothSelector()Type ParametersParametersReturnsuseBluetoothState()ParametersReturnsuseBTDevice()Type ParametersParametersReturnsuseBTDevices()ParametersReturnsuseDeviceConnection()ParametersReturnsuseHealthImport()Type ParametersParametersReturnsuseMeasurements()ParametersReturnsuseNearbyDeviceOffer()ParametersReturnsuseNearbyDevices()ReturnsuseOpenSeries()ParametersReturnsusePairedDevices()ParametersReturnsuseQueuedResults()Type ParametersParametersReturnsuseRequestPermissions()ParametersReturnsuseRuntimeEvent()Type ParametersParametersReturnsuseScanControl()ReturnsClassesA606CommandSequencerImplementsConstructorsConstructorParametersReturnsMethodsinitialCommands()ReturnsImplementation ofisHistoryTransfer()ReturnsImplementation ofnextCommand()ParametersReturnsImplementation ofA606DeviceExtendsAccessorsreadsHistoryOnRequestGet SignatureReturnsInherited fromConstructorsConstructorParametersReturnsOverridesMethodsconnect()ReturnsThrowsInherited fromdestroy()ReturnsInherited fromdisconnect()ReturnsInherited fromstopRecording()ReturnsInherited fromsyncHistory()ReturnsInherited fromPropertiesA606FrameReaderImplementsConstructorsConstructorReturnsMethodsreadFrame()ParametersReturnsImplementation ofAoj20aDeviceExtendsAccessorsreadsHistoryOnRequestGet SignatureReturnsInherited fromConstructorsConstructorParametersReturnsOverridesMethodsconnect()ReturnsThrowsInherited fromdestroy()ReturnsInherited fromdisconnect()ReturnsInherited fromstopRecording()ReturnsInherited fromsyncHistory()ReturnsInherited fromPropertiesAojCommandSequencerImplementsConstructorsConstructorParametersReturnsMethodscommandProgress()ParametersReturnsImplementation ofinitialCommands()ReturnsImplementation ofisHistoryTransfer()ReturnsImplementation ofnextCommand()ParametersReturnsImplementation ofAojFrameReaderImplementsConstructorsConstructorReturnsMethodsreadFrame()ParametersReturnsImplementation ofBackgroundSyncCoordinatorType ParametersConstructorsConstructorParametersReturnsMethodsenqueue()ParametersReturnsflush()ParametersReturnsgetQueued()Returnssubscribe()ParametersReturnsupdateOptions()ParametersReturnsBloodGlucoseDeviceExtendsAccessorsreadsHistoryOnRequestGet SignatureReturnsInherited fromConstructorsConstructorParametersReturnsOverridesMethodsconnect()ReturnsThrowsInherited fromdestroy()ReturnsInherited fromdisconnect()ReturnsInherited fromstopRecording()ReturnsInherited fromsyncHistory()ReturnsInherited fromPropertiesBluetoothErrorExtendsConstructorsConstructorParametersReturnsOverridesPropertiesabstract BTManagedDeviceExtended byType ParametersImplementsAccessorsreadsHistoryOnRequestGet SignatureReturnsConstructorsConstructorParametersReturnsMethodsconnect()ReturnsThrowsImplementation ofdestroy()Returnsdisconnect()ReturnsImplementation ofstopRecording()ReturnssyncHistory()ReturnsPropertiesBTManagerType ParametersConstructorsConstructorParametersReturnsMethodsdestroy()ReturnsdisconnectDevice()ParametersReturnsforget()ParametersReturnsgetOpenSeries()ReturnskeepConnecting()ParametersReturnsonConnectionEvent()ParametersReturnsonDeviceFound()ParametersReturnsonDeviceStatusChanged()ParametersReturnsonError()ParametersReturnsonResult()ParametersReturnsonWaveform()ParametersReturnspauseScan()ReturnsrestoreDevices()ParametersReturnsresumeScan()ReturnssetAutoConnect()ParametersReturnssetBackgroundScanEnabled()ParametersReturnsstartScan()ReturnsstopRecording()ParametersReturnsstopScan()ReturnssubscribeOpenSeries()ParametersReturnsCheckmeFrameReaderImplementsConstructorsConstructorReturnsMethodsreadFrame()ParametersReturnsImplementation ofCheckmePodDeviceExtendsAccessorsreadsHistoryOnRequestGet SignatureReturnsInherited fromConstructorsConstructorParametersReturnsOverridesMethodsconnect()ReturnsThrowsInherited fromdestroy()ReturnsInherited fromdisconnect()ReturnsInherited fromstopRecording()ReturnsInherited fromsyncHistory()ReturnsInherited fromPropertiesCheckmePodFrameReaderImplementsConstructorsConstructorReturnsMethodsreadFrame()ParametersReturnsImplementation ofCheckmePodSequencerImplementsConstructorsConstructorParametersReturnsMethodsinitialCommands()ReturnsImplementation ofnextCommand()ParametersReturnsImplementation ofCheckmeProDeviceExtendsAccessorsreadsHistoryOnRequestGet SignatureReturnsInherited fromConstructorsConstructorParametersReturnsOverridesMethodsconnect()ReturnsThrowsInherited fromdestroy()ReturnsInherited fromdisconnect()ReturnsInherited fromstopRecording()ReturnsInherited fromsyncHistory()ReturnsInherited fromPropertiesCheckmeProSequencerImplementsConstructorsConstructorParametersReturnsMethodscommandTimeoutMs()ReturnsImplementation ofinitialCommands()ReturnsImplementation ofisHistoryTransfer()ReturnsImplementation ofisNormalDisconnect()ReturnsImplementation ofnextCommand()ParametersReturnsImplementation ofonCommandTimeout()ReturnsImplementation ofCustomDeviceExtendsExtended byAccessorsreadsHistoryOnRequestGet SignatureReturnsOverridesConstructorsConstructorParametersReturnsOverridesMethodsconnect()ReturnsThrowsInherited fromdestroy()ReturnsInherited fromdisconnect()ReturnsInherited fromstopRecording()ReturnsOverridessyncHistory()ReturnsInherited fromPropertiesDeviceSelectionRequiredErrorExtendsConstructorsConstructorParametersReturnsOverridesGenialT31CommandSequencerImplementsConstructorsConstructorParametersReturnsMethodsinitialCommands()ReturnsImplementation ofnextCommand()ParametersReturnsImplementation ofGenialT31DeviceExtendsAccessorsreadsHistoryOnRequestGet SignatureReturnsInherited fromConstructorsConstructorParametersReturnsOverridesMethodsconnect()ReturnsThrowsInherited fromdestroy()ReturnsInherited fromdisconnect()ReturnsInherited fromstopRecording()ReturnsInherited fromsyncHistory()ReturnsInherited fromPropertiesGenialT31FrameReaderImplementsConstructorsConstructorReturnsMethodsreadFrame()ParametersReturnsImplementation ofLepuFileTransferImplementsConstructorsConstructorParametersReturnsMethodsinitialCommands()ParametersReturnsImplementation ofisHistoryTransfer()ReturnsImplementation ofnextCommand()ParametersReturnsImplementation ofS9CommandSequencerImplementsConstructorsConstructorParametersReturnsMethodscommandProgress()ParametersReturnsImplementation ofcommandTimeoutMs()ReturnsImplementation ofinitialCommands()ReturnsImplementation ofisHistoryTransfer()ReturnsImplementation ofnextCommand()ParametersReturnsImplementation ofonCommandTimeout()ReturnsImplementation ofS9FrameReaderImplementsConstructorsConstructorReturnsMethodsreadFrame()ParametersReturnsImplementation ofTrasenseS9DeviceExtendsAccessorsreadsHistoryOnRequestGet SignatureReturnsInherited fromConstructorsConstructorParametersReturnsOverridesMethodsconnect()ReturnsThrowsInherited fromdestroy()ReturnsInherited fromdisconnect()ReturnsInherited fromstopRecording()ReturnsInherited fromsyncHistory()ReturnsInherited fromPropertiesVerovalActivityDeviceExtendsAccessorsreadsHistoryOnRequestGet SignatureReturnsInherited fromConstructorsConstructorParametersReturnsOverridesMethodsconnect()ReturnsThrowsInherited fromdestroy()ReturnsInherited fromdisconnect()ReturnsInherited fromstopRecording()ReturnsInherited fromsyncHistory()ReturnsInherited fromPropertiesVerovalActivitySequencerImplementsConstructorsConstructorParametersReturnsMethodsinitialCommands()ReturnsImplementation ofnextCommand()ParametersReturnsImplementation ofVerovalDuoControlDeviceExtendsAccessorsreadsHistoryOnRequestGet SignatureReturnsInherited fromConstructorsConstructorParametersReturnsOverridesMethodsconnect()ReturnsThrowsInherited fromdestroy()ReturnsInherited fromdisconnect()ReturnsInherited fromstopRecording()ReturnsInherited fromsyncHistory()ReturnsInherited fromPropertiesVerovalEcgDeviceExtendsAccessorsreadsHistoryOnRequestGet SignatureReturnsInherited fromConstructorsConstructorParametersReturnsOverridesMethodsconnect()ReturnsThrowsInherited fromdestroy()ReturnsInherited fromdisconnect()ReturnsInherited fromstopRecording()ReturnsInherited fromsyncHistory()ReturnsInherited fromPropertiesFunctionsaoj20aThermometer()ParametersReturnsaojCommandByte()ParametersReturnsbluetoothErrorCodeFor()ParametersReturnsbosoMedicusMonitor()ParametersReturnsbp2aMonitor()ParametersReturnsbp2tMonitor()ParametersReturnsbp2vMonitor()ParametersReturnsbp2wMonitor()ParametersReturnsbpu26Monitor()ParametersReturnsbpw26Monitor()ParametersReturnsbtDeviceMatches()ParametersReturnsbuildA606ConnectedCommand()ReturnsbuildA606TimeCommand()ParametersReturnsbuildA606UploadCommand()ParametersReturnsbuildAojFrame()ParametersReturnsbuildGenialT31TimeCommand()ParametersReturnscheckmeCommand()ParametersReturnscheckmePodCommand()ParametersReturnscheckmePodSyncTime()ParametersReturnscheckmeReadContent()ParametersReturnscheckmeReadEnd()ReturnscheckmeReadFileStart()ParametersReturnsclockSyncCapabilityForDevice()ParametersReturnscreateBackgroundBleManager()ParametersReturnscreateBluetoothRuntime()ParametersReturnscreateFakeBleDevice()ParametersReturnscreateFakeBleManager()ParametersReturnscreateFileQueueStorage()ParametersReturnscreateLegacyResultId()ParametersReturnscreateStableResultId()ParametersReturnsdecodeAojError()ParametersReturnsdecodeCheckmeEcgFile()ParametersReturnsdecodeCheckmePodResponse()ParametersReturnsdecodeCheckmeResponse()ParametersReturnsdecodePulsebitEcgFile()ParametersReturnsdecodeVerovalEcgSamples()ParametersReturnsdecodeViatomEcgRecording()ParametersReturnsdefineCustomDevice()ParametersReturnsdefineRecordedDeviceFrames()Type ParametersParametersReturnsdescribeLepuResponseType()ParametersReturnsdeviceTitle()ParametersReturnser1Recorder()ParametersReturnser2Recorder()ParametersReturnser3Recorder()ParametersReturnsfindDeviceVariant()ParametersReturnsgetBackgroundServiceUUIDs()ParametersReturnsgetClockParts()ParametersReturnsgetRestoredBleState()ParametersReturnsisClockSyncEnabled()ParametersReturnsisLepuSuccess()ParametersReturnsisTrasenseS9Advertisement()ParametersReturnslepodMonitor()ParametersReturnslepuDevice()ParametersReturnslepuNameMatch()ParametersReturnslepuResponseType()ParametersReturnslpBp2wMonitor()ParametersReturnsparseA606Record()ParametersReturnsparseCheckmeBloodPressureRecords()ParametersReturnsparseCheckmeDailyRecords()ParametersReturnsparseCheckmeEcgRecords()ParametersReturnsparseCheckmeOxygenRecords()ParametersReturnsparseCheckmePodRealtimeReading()ParametersReturnsparseCheckmeTemperatureRecords()ParametersReturnsparseLepuDeviceInfo()ParametersReturnsparsePulsebitEcgRecords()ParametersReturnsparseRecordedAt()ParametersReturnsparseVerovalDuoControlRecordMetadata()ParametersReturnsrecordedAtFromT31Frame()ParametersReturnsrecordedAtFromViatomFileName()ParametersReturnsreplayRecordedFrames()ParametersReturnsrequestBluetoothPermission()ReturnsreviveResultDates()Type ParametersParametersReturnssetDeviceSecretStorage()ParametersReturnsstandardBloodPressureDevice()ParametersReturnsstandardGlucoseDevice()ParametersReturnsstandardHeartRateDevice()ParametersReturnsstandardPulseOximeterDevice()ParametersReturnsstandardThermometerDevice()ParametersReturnsstandardWeightScaleDevice()ParametersReturnstmbBpMonitor()ParametersReturnstoBluetoothError()ParametersReturnsverovalCompactMonitor()ParametersReturnsverovalFusionMonitor()ParametersReturnsviatomBpMonitor()ParametersReturnsviatomOximeter()ParametersReturnsviatomOxyIiMonitor()ParametersReturnsvisomatComfortSoftBtMonitor()ParametersReturnsInterfacesA606RecordPropertiesBackgroundBleManagerOptionsExtendsPropertiesBackgroundSyncFlushOptionsPropertiesBackgroundSyncOptionsType ParametersPropertiesBackgroundSyncResultExtendsType ParametersPropertiesBackgroundSyncStoragePropertiesBluetoothDevicePickerPropsExtendsPropertiesBluetoothRuntimePropertiesBluetoothRuntimeSnapshotPropertiesBosoMedicusParamsPropertiesBTManagerOptionsPropertiesBTProviderChildWrapperPropsExtended byType ParametersPropertiesBTProviderPermissionFallbackPropsPropertiesBTProviderPropsExtendsType ParametersPropertiesCatalogFieldPropertiesCheckmeBloodPressureRecordExtendsPropertiesCheckmeDailyRecordExtendsPropertiesCheckmeEcgFilePropertiesCheckmeEcgRecordExtendsPropertiesCheckmeOxygenRecordExtendsPropertiesCheckmePodRealtimeReadingPropertiesCheckmePodResponsePropertiesCheckmePodSequencerParamsPropertiesCheckmeResponsePropertiesCheckmeTemperatureRecordExtendsPropertiesCheckmeTimestampedRecordExtended byPropertiesCheckmeTransferParamsPropertiesClockSyncOptionsPropertiesCommandSequencerMethodscommandProgress()?ParametersReturnscommandTimeoutMs()?ReturnsinitialCommands()ReturnsisHistoryTransfer()?ReturnsisNormalDisconnect()?ReturnsnextCommand()ParametersReturnsonCommandTimeout()?ReturnsonServicesDiscovered()?ParametersReturnsCommandTimeoutResultPropertiesCompiledCustomFieldPropertiesCustomCaseSpecPropertiesCustomDeviceDefinitionPropertiesCustomDeviceSpecPropertiesCustomFieldSpecPropertiesCustomFrameSpecPropertiesCustomLepuSpecPropertiesCustomMonitorSpecPropertiesCustomSequencerContextPropertiesCustomServiceSpecPropertiesDeviceCommandPropertiesDeviceConnectionEventPropertiesDeviceMeasurementMapPropertiesDeviceResultPolicyPropertiesDeviceSecretStoragePropertiesDeviceStatusChangeCallbackPropertiesDeviceWaveformPropertiesEcgCalibrationPropertiesErrorCallbackPropertiesFakeBleDevicePropertiesFakeBleDeviceOptionsPropertiesFakeBleManagerPropertiesFakeBleManagerOptionsPropertiesGlucoseRecordDetailsPropertiesHealthImportAdapterDeprecatedType ParametersPropertiesIBTManagedDevicePropertiesIMedicalDevicePropertiesIServicePropertiesLepuDeviceInfoPropertiesLepuDeviceParamsPropertiesLepuFilePropertiesLepuFileTransferParamsPropertiesMeasurementSeriesExtended byPropertiesOpenSeriesExtendsPropertiesPairedDeviceStoragePropertiesPulsebitEcgRecordExtendsPropertiesRawBluetoothAccessPropertiesRecordedBleFramePropertiesResultCallbackExtended byType ParametersPropertiesRuntimeDevicePropertiesRuntimeEventMapPropertiesUseBackgroundSyncOptionsExtended byPropertiesUseBluetoothPermissionOptionsPropertiesUseBluetoothStateOptionsPropertiesUseBTDeviceOptionsPropertiesUseMeasurementsOptionsPropertiesUseNearbyDeviceOfferOptionsPropertiesUsePairedDevicesOptionsPropertiesVerovalFusionParamsPropertiesViatomEcgRecordingPropertiesVisomatComfortSoftBtParamsPropertiesType AliasesAcceptedDeviceBackgroundSyncStatusBluetoothPermissionStatusBluetoothRuntimeManagerBluetoothStateBTDeviceFilterBTDeviceSelectionCheckmeMeasurementUnion MembersType LiteralCheckmePodMeasurementUnion MembersType LiteralCheckmePodResultType DeclarationClockSyncCapabilityClockSyncTimezoneCustomByteOrderCustomCaseKindCustomDeviceIdType DeclarationCustomFieldEncodingCustomFrameHandlerParametersReturnsCustomFrameHandlerFactoryReturnsCustomMeasurementCustomReadingDecoratorParametersReturnsCustomSequencerFactoryParametersReturnsDeviceConnectionEventKindDeviceDataPropertiesclockSync?hardwareAddress?idlocalNamemanufacturerDatamanufacturerName?measurementTypesmodel?namesnvariant?manufacturermodelDeviceKeyDeviceKeyOfType ParametersDeviceVariantPropertiesdevicemanufacturermodelnameMatch?GlucoseReportedUnitGlucoseSampleLocationGlucoseSensorWarningGlucoseSpecimenTypeLepuCommandValueLepuTransportNameMeasurementFeedbackKeyMeasurementForDeviceType ParametersMeasurementTypeForDevicesType ParametersType DeclarationNearbyDeviceNearbyDeviceOfferStatusRecordedFrameSinkParametersReturnsResultCallbackDataType ParametersResultPolicyResultPolicyByMeasurementRuntimeBluetoothStateRuntimeConnectionEventRuntimeErrorRuntimeEventRuntimeResultStandardProfileIdVerovalBloodPressureReadingType DeclarationVerovalDuoControlMeasurementType DeclarationEnumerationsBluetoothErrorCodeEnumeration MembersDeviceStatusEnumeration MembersIntegratedDevicesEnumeration MembersVariablesA606_NOTIFYA606_SERVICEA606_WRITEa606MainServicesAOJ_COMMANDType DeclarationAOJ_RESPONSEType DeclarationaojMainServicesBOSO_MEDICUS_NAME_MATCHBP3_MODEL_NAMESCHECKME_NOTIFYCHECKME_SERVICECHECKME_WRITECheckmeCommandType DeclarationCheckmeListTypeType DeclarationcheckmeMainServicesCheckmePodCommandType DeclarationcheckmePodMainServicesDEFAULT_CALIBRATIONType DeclarationDEFAULT_PAIRED_DEVICE_STORAGE_KEYDEFAULT_QUEUE_KEYDEFAULT_RESTORE_STATE_IDENTIFIERDEVICE_VARIANTSER1_MODEL_NAMESER2_MODEL_NAMESER3_MODEL_NAMESGENIAL_T31_CID_ACKGENIAL_T31_CONNECTGENIAL_T31_NOTIFYGENIAL_T31_SERVICEGENIAL_T31_WRITEgenialT31MainServicesLEPOD_MODEL_NAMESLEPU_CATALOG_EXCLUDED_DEVICE_NAMESLEPU_CATALOG_HIDDEN_DEVICE_NAMESLEPU_DEVICE_NAMESLEPU_FIRST_WORD_DEVICE_NAMESLepuCommandType DeclarationLepuResponseTypeType DeclarationlepuTransportsType DeclarationMeasurementFeedbackKeyType DeclarationmeasurementFieldCatalogTMB_MODEL_NAMESTRASENSE_S9_NOTIFYTRASENSE_S9_SERVICETRASENSE_S9_WRITEVEROVAL_ACTIVITY_BOND_WRITEVEROVAL_ACTIVITY_NOTIFYVEROVAL_ACTIVITY_SECONDARY_NOTIFYVEROVAL_ACTIVITY_SERVICEVEROVAL_ACTIVITY_WRITEVEROVAL_BP_MODEL_NAMESVEROVAL_ECG_SAMPLE_RATE_HZVEROVAL_FUSION_NAME_MATCHVIATOM_ECG_MILLIVOLTS_PER_COUNTVIATOM_ECG_SAMPLE_RATE_HZVIATOM_OXIMETER_NAMESVIATOM_OXYII_NAMESVISOMAT_COMFORT_SOFT_BT_NAME_MATCHReferencesCHECKME_POD_NOTIFYCHECKME_POD_SERVICECHECKME_POD_WRITE