# @ovok/native/bt-device

Canonical page: https://docs.ovok.com/native-sdk/reference/bt-device

Bluetooth device lists, the supported-device catalog and device images.

Import from `@ovok/native/bt-device`.

## Components [#components]

### BTDeviceItem() [#btdeviceitem]

```ts
function BTDeviceItem(__namedParameters): Element;
```

Pressable device card; compose it with the `BTDeviceItem.*` sub-components.

#### Parameters [#parameters]

| Parameter | Type |
| ------ | ------ |
| `__namedParameters` | `PropsWithChildren`\<`TouchableOpacityProps`\> |

#### Returns [#returns]

`Element`

***

### BTDeviceList() [#btdevicelist]

```ts
function BTDeviceList(__namedParameters): Element;
```

Renders the connectable devices from the device list context as tappable cards with instructions.

#### Parameters [#parameters-1]

| Parameter | Type |
| ------ | ------ |
| `__namedParameters` | `BTDeviceListProps` |

#### Returns [#returns-1]

`Element`

***

### DeviceListProvider() [#devicelistprovider]

```ts
function DeviceListProvider(__namedParameters): Element;
```

Provides the device list state, seeded with the default catalog, to descendants.

#### Parameters [#parameters-2]

| Parameter | Type |
| ------ | ------ |
| `__namedParameters` | \{ `children`: `ReactNode`; \} |
| `__namedParameters.children` | `ReactNode` |

#### Returns [#returns-2]

`Element`

***

### SupportedDeviceList() [#supporteddevicelist]

```ts
function SupportedDeviceList(__namedParameters): Element;
```

Renders the catalog of supported devices with manufacturer and image credit.

#### Parameters [#parameters-3]

| Parameter | Type |
| ------ | ------ |
| `__namedParameters` | [`SupportedDeviceListProps`](#supporteddevicelistprops) |

#### Returns [#returns-3]

`Element`

## Hooks [#hooks]

### useDeviceList() [#usedevicelist]

```ts
function useDeviceList(): DeviceListContextValue;
```

Returns the device list and its setter; must be used within `DeviceListProvider`.

#### Returns [#returns-4]

[`DeviceListContextValue`](#devicelistcontextvalue)

***

### useSupportedDevices() [#usesupporteddevices]

```ts
function useSupportedDevices(filter?): SupportedDeviceDefinition[];
```

The catalog products matching `filter`, in catalog order: by kind, manufacturer, what they
measure, delivery, key, or a `where` of your own. Every product without a filter.

#### Parameters [#parameters-4]

| Parameter | Type |
| ------ | ------ |
| `filter?` | [`DeviceFilter`](#devicefilter) |

#### Returns [#returns-5]

[`SupportedDeviceDefinition`](#supporteddevicedefinition)[]

## Functions [#functions]

### deliveryOf() [#deliveryof]

```ts
function deliveryOf(devices): DeviceDelivery;
```

`"live"` for a device that streams values while connected: one listed in `LIVE_DEVICE_KEYS`, or a declaration that
keeps a live session (`sessionPolicy`), such as the O2Ring's. Takes the declarations, or only their keys.

#### Parameters [#parameters-5]

| Parameter | Type |
| ------ | ------ |
| `devices` | readonly ( \| [`F4`](/native-sdk/reference/bt-management#enumeration-member-f4) \| [`LEPU_F4_SCALE`](/native-sdk/reference/bt-management#enumeration-member-lepu_f4_scale) \| [`LEPU_F5_SCALE`](/native-sdk/reference/bt-management#enumeration-member-lepu_f5_scale) \| [`BP2`](/native-sdk/reference/bt-management#enumeration-member-bp2) \| [`SPO2`](/native-sdk/reference/bt-management#enumeration-member-spo2) \| [`MYSENSE`](/native-sdk/reference/bt-management#enumeration-member-mysense) \| [`AOJ20A`](/native-sdk/reference/bt-management#enumeration-member-aoj20a) \| [`PC60WF`](/native-sdk/reference/bt-management#enumeration-member-pc60wf) \| [`TAIDOC_GLUCOSE`](/native-sdk/reference/bt-management#enumeration-member-taidoc_glucose) \| [`GLUCOCHECK`](/native-sdk/reference/bt-management#enumeration-member-glucocheck) \| [`ANDESFITTEMP`](/native-sdk/reference/bt-management#enumeration-member-andesfittemp) \| [`FORATEMP`](/native-sdk/reference/bt-management#enumeration-member-foratemp) \| [`COSINUSS`](/native-sdk/reference/bt-management#enumeration-member-cosinuss) \| [`BC01`](/native-sdk/reference/bt-management#enumeration-member-bc01) \| [`FORA_SCALE`](/native-sdk/reference/bt-management#enumeration-member-fora_scale) \| [`RPM_SCALE`](/native-sdk/reference/bt-management#enumeration-member-rpm_scale) \| [`TRANSTEK_A6_BPM`](/native-sdk/reference/bt-management#enumeration-member-transtek_a6_bpm) \| [`MAMBO_A5`](/native-sdk/reference/bt-management#enumeration-member-mambo_a5) \| [`CLEVERTEMP`](/native-sdk/reference/bt-management#enumeration-member-clevertemp) \| [`CMED`](/native-sdk/reference/bt-management#enumeration-member-cmed) \| [`SP80B`](/native-sdk/reference/bt-management#enumeration-member-sp80b) \| [`S5`](/native-sdk/reference/bt-management#enumeration-member-s5) \| [`ALIVE_COR`](/native-sdk/reference/bt-management#enumeration-member-alive_cor) \| [`BGM`](/native-sdk/reference/bt-management#enumeration-member-bgm) \| [`VEROVAL_DUO_CONTROL`](/native-sdk/reference/bt-management#enumeration-member-veroval_duo_control) \| [`VEROVAL_ECG`](/native-sdk/reference/bt-management#enumeration-member-veroval_ecg) \| [`VEROVAL_ACTIVITY`](/native-sdk/reference/bt-management#enumeration-member-veroval_activity) \| [`GENIAL_T31`](/native-sdk/reference/bt-management#enumeration-member-genial_t31) \| [`ZH_SG_A606`](/native-sdk/reference/bt-management#enumeration-member-zh_sg_a606) \| [`BPW1`](/native-sdk/reference/bt-management#enumeration-member-bpw1) \| [`CHECKME`](/native-sdk/reference/bt-management#enumeration-member-checkme) \| [`CHECKME_POD`](/native-sdk/reference/bt-management#enumeration-member-checkme_pod) \| [`CHECKME_POD_WPS`](/native-sdk/reference/bt-management#enumeration-member-checkme_pod_wps) \| [`AP20`](/native-sdk/reference/bt-management#enumeration-member-ap20) \| [`AP20_WPS`](/native-sdk/reference/bt-management#enumeration-member-ap20_wps) \| [`PC68B`](/native-sdk/reference/bt-management#enumeration-member-pc68b) \| [`PC100`](/native-sdk/reference/bt-management#enumeration-member-pc100) \| [`BPM188`](/native-sdk/reference/bt-management#enumeration-member-bpm188) \| [`PC300`](/native-sdk/reference/bt-management#enumeration-member-pc300) \| [`POCTOR_M3102`](/native-sdk/reference/bt-management#enumeration-member-poctor_m3102) \| [`BIOLAND_BGM`](/native-sdk/reference/bt-management#enumeration-member-bioland_bgm) \| [`PULSEBIT_EX`](/native-sdk/reference/bt-management#enumeration-member-pulsebit_ex) \| [`CHECKME_EX`](/native-sdk/reference/bt-management#enumeration-member-checkme_ex) \| [`CHECKME_LE`](/native-sdk/reference/bt-management#enumeration-member-checkme_le) \| [`PC80B`](/native-sdk/reference/bt-management#enumeration-member-pc80b) \| [`WBP_02`](/native-sdk/reference/bt-management#enumeration-member-wbp_02) \| [`PM10`](/native-sdk/reference/bt-management#enumeration-member-pm10) \| [`LPM311`](/native-sdk/reference/bt-management#enumeration-member-lpm311) \| [`VIATOM_R20`](/native-sdk/reference/bt-management#enumeration-member-viatom_r20) \| [`VIATOM_R200`](/native-sdk/reference/bt-management#enumeration-member-viatom_r200) \| [`SP_20`](/native-sdk/reference/bt-management#enumeration-member-sp_20) \| [`SP_20_BLE`](/native-sdk/reference/bt-management#enumeration-member-sp_20_ble) \| [`SP_20_WPS`](/native-sdk/reference/bt-management#enumeration-member-sp_20_wps) \| [`BBSM_S3`](/native-sdk/reference/bt-management#enumeration-member-bbsm_s3) \| [`VIATOM_BBSM_BS1`](/native-sdk/reference/bt-management#enumeration-member-viatom_bbsm_bs1) \| [`PF10AW_ME`](/native-sdk/reference/bt-management#enumeration-member-pf10aw_me) \| [`SA10AW_PU`](/native-sdk/reference/bt-management#enumeration-member-sa10aw_pu) \| [`PF10BW_VE`](/native-sdk/reference/bt-management#enumeration-member-pf10bw_ve) \| [`TRASENSE_S9`](/native-sdk/reference/bt-management#enumeration-member-trasense_s9) \| [`TRANSTEK_BPM`](/native-sdk/reference/bt-management#enumeration-member-transtek_bpm) \| [`TRANSTEK_SCALE`](/native-sdk/reference/bt-management#enumeration-member-transtek_scale) \| [`TRANSTEK_SCALE_1525`](/native-sdk/reference/bt-management#enumeration-member-transtek_scale_1525) \| [`TRANSTEK_TRACKER`](/native-sdk/reference/bt-management#enumeration-member-transtek_tracker) \| [`FAMIDOC_BPM`](/native-sdk/reference/bt-management#enumeration-member-famidoc_bpm) \| [`FAMIDOC_IR_THERMOMETER`](/native-sdk/reference/bt-management#enumeration-member-famidoc_ir_thermometer) \| [`FAMIDOC_CONTACT_THERMOMETER`](/native-sdk/reference/bt-management#enumeration-member-famidoc_contact_thermometer) \| [`AOJ_BPM`](/native-sdk/reference/bt-management#enumeration-member-aoj_bpm) \| [`AOJ_BPM_FFF0`](/native-sdk/reference/bt-management#enumeration-member-aoj_bpm_fff0) \| [`AOJ_70B`](/native-sdk/reference/bt-management#enumeration-member-aoj_70b) \| [`JUMPER_OXIMETER`](/native-sdk/reference/bt-management#enumeration-member-jumper_oximeter) \| [`JUMPER_BPM`](/native-sdk/reference/bt-management#enumeration-member-jumper_bpm) \| [`JUMPER_THERMOMETER`](/native-sdk/reference/bt-management#enumeration-member-jumper_thermometer) \| [`JOYTECH_BPM`](/native-sdk/reference/bt-management#enumeration-member-joytech_bpm) \| [`JOYTECH_THERMOMETER`](/native-sdk/reference/bt-management#enumeration-member-joytech_thermometer) \| [`AND_BPM`](/native-sdk/reference/bt-management#enumeration-member-and_bpm) \| [`AND_BPM_CTS`](/native-sdk/reference/bt-management#enumeration-member-and_bpm_cts) \| [`AND_SCALE`](/native-sdk/reference/bt-management#enumeration-member-and_scale) \| [`YONKER_OXIMETER`](/native-sdk/reference/bt-management#enumeration-member-yonker_oximeter) \| [`YONKER_BPM`](/native-sdk/reference/bt-management#enumeration-member-yonker_bpm) \| [`YONKER_THERMOMETER`](/native-sdk/reference/bt-management#enumeration-member-yonker_thermometer) \| [`YONKER_SCALE`](/native-sdk/reference/bt-management#enumeration-member-yonker_scale) \| [`YONKER_80B`](/native-sdk/reference/bt-management#enumeration-member-yonker_80b) \| [`COFOE_BPM`](/native-sdk/reference/bt-management#enumeration-member-cofoe_bpm) \| [`COFOE_BPM_HISTORY`](/native-sdk/reference/bt-management#enumeration-member-cofoe_bpm_history) \| [`COFOE_GLUCOMETER`](/native-sdk/reference/bt-management#enumeration-member-cofoe_glucometer) \| [`COFOE_GLUCOMETER_CGH25`](/native-sdk/reference/bt-management#enumeration-member-cofoe_glucometer_cgh25) \| [`COFOE_THERMOMETER`](/native-sdk/reference/bt-management#enumeration-member-cofoe_thermometer) \| [`TAIDOC_MULTI`](/native-sdk/reference/bt-management#enumeration-member-taidoc_multi) \| [`TAIDOC_BPM`](/native-sdk/reference/bt-management#enumeration-member-taidoc_bpm) \| [`TAIDOC_THERMOMETER`](/native-sdk/reference/bt-management#enumeration-member-taidoc_thermometer) \| [`TAIDOC_OXIMETER`](/native-sdk/reference/bt-management#enumeration-member-taidoc_oximeter) \| [`TAIDOC_SCALE`](/native-sdk/reference/bt-management#enumeration-member-taidoc_scale) \| [`CustomDeviceId`](/native-sdk/reference/bt-management#customdeviceid) \| [`CustomDeviceDefinition`](/native-sdk/reference/bt-management#customdevicedefinition))[] |

#### Returns [#returns-6]

[`DeviceDelivery`](#devicedelivery)

***

### deviceKeyOf() [#devicekeyof]

```ts
function deviceKeyOf(device): DeviceKey;
```

The key BTManager reports a device under (`deviceData.name`): a built-in parser or a declaration id.

#### Parameters [#parameters-6]

| Parameter | Type |
| ------ | ------ |
| `device` | [`AcceptedDevice`](/native-sdk/reference/bt-management#accepteddevice) |

#### Returns [#returns-7]

[`DeviceKey`](/native-sdk/reference/bt-management#devicekey)

***

### deviceMatches() [#devicematches]

```ts
function deviceMatches(device, filter?): boolean;
```

Whether a catalog product matches every field of `filter`.

#### Parameters [#parameters-7]

| Parameter | Type |
| ------ | ------ |
| `device` | [`SupportedDeviceDefinition`](#supporteddevicedefinition) |
| `filter?` | [`DeviceFilter`](#devicefilter) |

#### Returns [#returns-8]

`boolean`

***

### filterSupportedDevices() [#filtersupporteddevices]

```ts
function filterSupportedDevices(filter?, devices?): SupportedDeviceDefinition[];
```

The catalog products matching `filter`, in catalog order.

#### Parameters [#parameters-8]

| Parameter | Type | Default value |
| ------ | ------ | ------ |
| `filter?` | [`DeviceFilter`](#devicefilter) | `undefined` |
| `devices?` | readonly [`SupportedDeviceDefinition`](#supporteddevicedefinition)[] | `SUPPORTED_DEVICES` |

#### Returns [#returns-9]

[`SupportedDeviceDefinition`](#supporteddevicedefinition)[]

***

### findSupportedDevice() [#findsupporteddevice]

```ts
function findSupportedDevice(of): SupportedDeviceDefinition | undefined;
```

The catalog product behind a string (a catalog id, else a product name, else a reported key) or
a connected device's `deviceData`: the product its advertised name identified, else its key's
product. Pass `deviceData` for a device: a key can also be another product's name.

#### Parameters [#parameters-9]

| Parameter | Type |
| ------ | ------ |
| `of` | \| `string` \| `Pick`\<[`DeviceData`](/native-sdk/reference/bt-management#devicedata), `"name"` \| `"variant"`\> |

#### Returns [#returns-10]

[`SupportedDeviceDefinition`](#supporteddevicedefinition) \| `undefined`

***

### imageCreditOf() [#imagecreditof]

```ts
function imageCreditOf(credit): DeviceImageCredit;
```

`"Label: https://…"` as `{ label, url }`, the URL ending at a space or `;` (a note may follow it); an SDK
illustration's note as its first clause.

#### Parameters [#parameters-10]

| Parameter | Type |
| ------ | ------ |
| `credit` | `string` |

#### Returns [#returns-11]

[`DeviceImageCredit`](#deviceimagecredit)

***

### kindOf() [#kindof]

```ts
function kindOf(types): DeviceKind;
```

Classifies a device by the measurement types it reports.

#### Parameters [#parameters-11]

| Parameter | Type |
| ------ | ------ |
| `types` | readonly `MeasurementTypeKey`[] |

#### Returns [#returns-12]

[`DeviceKind`](#devicekind)

***

### primaryMeasurementOf() [#primarymeasurementof]

```ts
function primaryMeasurementOf(types): MeasurementTypeKey | undefined;
```

The reading a device is for. Heart rate comes along with most readings (a blood pressure, an ECG,
a step count), so it is the main one only on a device that measures nothing else.

#### Parameters [#parameters-12]

| Parameter | Type |
| ------ | ------ |
| `types` | readonly `MeasurementTypeKey`[] |

#### Returns [#returns-13]

`MeasurementTypeKey` \| `undefined`

***

### resultPoliciesFor() [#resultpoliciesfor]

```ts
function resultPoliciesFor(devices): Record<string, DeviceResultPolicy>;
```

`resultPolicies` keeping each live device in `devices` as series (`LIVE_RESULT_POLICY`); spot devices keep every
reading.

#### Parameters [#parameters-13]

| Parameter | Type |
| ------ | ------ |
| `devices` | readonly [`SupportedDeviceDefinition`](#supporteddevicedefinition)[] |

#### Returns [#returns-14]

`Record`\<`string`, [`DeviceResultPolicy`](/native-sdk/reference/bt-management#deviceresultpolicy)\>

## Interfaces [#interfaces]

### DeviceListContextValue [#devicelistcontextvalue]

Value exposed by the device list context.

#### Properties [#properties]

| Property | Type | Description |
| ------ | ------ | ------ |
| <a id="property-devicelistitems"></a> `deviceListItems` | [`DeviceListItem`](#devicelistitem)[] | Devices currently shown in the list. |
| <a id="property-setdevicelistitems"></a> `setDeviceListItems` | `Dispatch`\<`SetStateAction`\<[`DeviceListItem`](#devicelistitem)[]\>\> | Replaces the device list. |

## Type Aliases [#type-aliases]

### DeviceDelivery [#devicedelivery]

```ts
type DeviceDelivery = "spot" | "live";
```

How a device hands over readings: `spot` gives one per measurement; `live` sends values every
second or so for as long as it is connected (a heart-rate strap, a live oximeter, the Lepod).

***

### DeviceFilter [#devicefilter]

```ts
type DeviceFilter = object;
```

Narrows the device catalog. Every field given must match, and a list matches any one of its
values: `{ kind: "blood-pressure-monitor", manufacturer: "HARTMANN" }`,
`{ measures: MeasurementTypeKey.ecg, delivery: "spot" }`, `{ manufacturer: /yonker/i }`.

#### Properties [#properties-1]

##### delivery? [#delivery]

```ts
delivery?: DeviceDelivery;
```

Matches how readings are delivered.

##### id? [#id]

```ts
id?: OneOrMany<string>;
```

Matches the product ID.

##### key? [#key]

```ts
key?: OneOrMany<DeviceKey>;
```

Reported under any of these keys (`deviceData.name`).

##### kind? [#kind]

```ts
kind?: OneOrMany<DeviceKind>;
```

Matches the device kind.

##### manufacturer? [#manufacturer]

```ts
manufacturer?: TextMatch;
```

Matches the manufacturer name.

##### measures? [#measures]

```ts
measures?: OneOrMany<MeasurementTypeKey>;
```

Measures any of these.

##### name? [#name]

```ts
name?: TextMatch;
```

Matches the product name.

##### primaryMeasurement? [#primarymeasurement]

```ts
primaryMeasurement?: OneOrMany<MeasurementTypeKey>;
```

Matches the primary measurement.

##### shared? [#shared]

```ts
shared?: boolean;
```

Matches whether the parser serves other products.

##### standardProfile? [#standardprofile]

```ts
standardProfile?: boolean;
```

Matches devices using a standard Bluetooth SIG profile.

##### where? [#where]

```ts
where?: (device) => boolean;
```

Anything the fields above don't cover.

###### Parameters [#parameters-14]

| Parameter | Type |
| ------ | ------ |
| `device` | [`SupportedDeviceDefinition`](#supporteddevicedefinition) |

###### Returns [#returns-15]

`boolean`

***

### DeviceImageCredit [#deviceimagecredit]

```ts
type DeviceImageCredit = object;
```

Who made the catalog image, and where it came from when that is a web page.

#### Properties [#properties-2]

##### label [#label]

```ts
label: string;
```

Name of who made the image.

##### url? [#url]

```ts
url?: string;
```

Web page the image came from.

***

### DeviceKind [#devicekind]

```ts
type DeviceKind =
  | "blood-pressure-monitor"
  | "weight-scale"
  | "pulse-oximeter"
  | "thermometer"
  | "glucose-meter"
  | "ecg-recorder"
  | "heart-rate-monitor"
  | "activity-tracker"
  | "urine-analyzer"
  | "lipid-analyzer"
  | "respiratory-therapy"
  | "sleep-monitor"
  | "multi-parameter-monitor"
  | "other";
```

What a device is for, named after its main measurement.

***

### DeviceListItem [#devicelistitem]

```ts
type DeviceListItem = object;
```

One entry of the device list.

#### Properties [#properties-3]

##### deviceImageUri [#deviceimageuri]

```ts
deviceImageUri: string;
```

URI of the device image.

##### deviceType [#devicetype]

```ts
deviceType: IntegratedDevices;
```

Integrated device this entry represents.

##### status [#status]

```ts
status: DeviceStatus;
```

Current connection status.

##### subtitle [#subtitle]

```ts
subtitle: string;
```

Translation key of the subtitle.

##### title [#title]

```ts
title: string;
```

Translation key of the title.

***

### OneOrMany [#oneormany]

```ts
type OneOrMany<T> = T | readonly T[];
```

A single value or a list of values.

#### Type Parameters [#type-parameters]

| Type Parameter |
| ------ |
| <a id="type-parameter-t"></a> `T` |

***

### SupportedDevice [#supporteddevice]

```ts
type SupportedDevice = object;
```

Catalog entry of a supported device.

#### Properties [#properties-4]

##### creditsForImage [#creditsforimage]

```ts
creditsForImage: string;
```

Credit for the image.

##### logo [#logo]

```ts
logo: string;
```

Image of the product as a URI.

##### manufacturer [#manufacturer-1]

```ts
manufacturer: string;
```

Manufacturer name.

##### manufacturerKey [#manufacturerkey]

```ts
manufacturerKey: string;
```

Translation key of the manufacturer name.

##### name [#name-1]

```ts
name: string;
```

Product name.

##### nameKey [#namekey]

```ts
nameKey: string;
```

Translation key of the product name.

##### standardProfile? [#standardprofile-1]

```ts
standardProfile?: true;
```

Set for devices that use a standard Bluetooth SIG profile.

***

### SupportedDeviceDefinition [#supporteddevicedefinition]

```ts
type SupportedDeviceDefinition = SupportedDevice & object;
```

Catalog entry extended with its connection and measurement details.

#### Type Declaration [#type-declaration]

| Name | Type | Description |
| ------ | ------ | ------ |
| `acceptedDevices` | readonly [`AcceptedDevice`](/native-sdk/reference/bt-management#accepteddevice)[] | Ready to pass directly to BTProvider.acceptedDevices. |
| `delivery` | [`DeviceDelivery`](#devicedelivery) | One reading per measurement, or values continuously while connected. |
| `id` | `string` | Unique ID of the product. |
| `imageCredit` | [`DeviceImageCredit`](#deviceimagecredit) | `creditsForImage` as a label and, for a web source, its URL. |
| `keys` | readonly [`DeviceKey`](/native-sdk/reference/bt-management#devicekey)[] | Every key BTManager reports this product's devices under (`deviceData.name`). |
| `kind` | [`DeviceKind`](#devicekind) | What the product is for: a blood-pressure monitor, a weight scale, an ECG recorder… |
| `manualUrl?` | `string` | Link to the user manual. |
| `measurementTypes` | readonly `MeasurementTypeKey`[] | Measurement types it reports. |
| `primaryMeasurement?` | `MeasurementTypeKey` | The reading it is for; the rest of `measurementTypes` come along with it. |
| `shared` | `boolean` | Its parser also serves other products (rebadged models, a Bluetooth SIG profile), so a connected device may be any of them: `deviceData.variant` names the one it is, when known. |

***

### SupportedDeviceListProps [#supporteddevicelistprops]

```ts
type SupportedDeviceListProps = Omit<FlatListProps<SupportedDevice>, "data" | "renderItem"> & object;
```

Props of `SupportedDeviceList`: FlatList props except `data`.

#### Type Declaration [#type-declaration-1]

| Name | Type | Description |
| ------ | ------ | ------ |
| `renderItem?` | `FlatListProps`\<[`SupportedDevice`](#supporteddevice)\>\[`"renderItem"`\] | Custom row renderer; defaults to the standard device card. |

***

### TextMatch [#textmatch]

```ts
type TextMatch = OneOrMany<string> | RegExp;
```

Text to match: a value (in any case), any of several, or a pattern.

## Variables [#variables]

### DEVICE\_INSTRUCTION\_PDFS [#device_instruction_pdfs]

```ts
const DEVICE_INSTRUCTION_PDFS: Partial<Record<IntegratedDevices, string>>;
```

Instruction manuals for the built-in parsers that have one.

***

### deviceImages [#deviceimages]

```ts
const deviceImages: object;
```

Base64 data-URI images of the supported devices, keyed by device.

#### Type Declaration [#type-declaration-2]

| Name | Type | Default value | Description |
| ------ | ------ | ------ | ------ |
| <a id="property-alivecordeviceimage"></a> `alivecorDeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATEAAADICAYAAACAj9YNAAAACXBIWXMAA…` | Base64 image of the AliveCor Kardia Mobile. |
| <a id="property-andesfitb33adeviceimage"></a> `andesfitB33ADeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAAACXBIWXMAA…` | Base64 image of the Andesfit B33A thermometer. |
| <a id="property-aoj20adeviceimage"></a> `aoj20aDeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAAACXBIWXMAA…` | Base64 image of the Viatom Smart AOJ20A. |
| <a id="property-bc401deviceimage"></a> `bc401DeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAAACXBIWXMAA…` | Base64 image of the Contec BC401. |
| <a id="property-bgmdeviceimage"></a> `bgmDeviceImage` | `string` | `"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAK…` | Base64 image of the blood glucose meter. |
| <a id="property-bodyweightdevicesmallimage"></a> `bodyWeightDeviceSmallImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmQAAAJkCAYAAAC/ET28AAAACXBIWXMAA…` | Base64 image of the body weight scale (small). |
| <a id="property-cosinussdeviceimage"></a> `cosinussDeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnQAAAGNCAYAAACYHOyDAAAMP2lDQ1BJQ…` | Base64 image of the Cosinuss in-ear sensor. |
| <a id="property-forair20deviceimage"></a> `foraIR20DeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAAACXBIWXMAA…` | Base64 image of the FORA IR20 thermometer. |
| <a id="property-foraw550deviceimage"></a> `foraW550DeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAAACXBIWXMAA…` | Base64 image of the FORA W550 scale. |
| <a id="property-glucocheckdeviceimage"></a> `glucocheckDeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAAACXBIWXMAA…` | Base64 image of the Glucocheck glucometer. |
| <a id="property-sp80bdeviceimage"></a> `sp80bDeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABBCAYAAABhNaJ7AAAACXBIWXMAA…` | Base64 image of the Lepu SP80B. |
| <a id="property-taidoctd1107deviceimage"></a> `taidocTD1107DeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAAACXBIWXMAA…` | Base64 image of the TaiDoc TD1107 thermometer. |
| <a id="property-taidoctd4216deviceimage"></a> `taidocTD4216DeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAAACXBIWXMAA…` | Base64 image of the TaiDoc TD4216 glucometer. |
| <a id="property-telerpmdeviceimage"></a> `telerpmDeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAAACXBIWXMAA…` | Base64 image of the Transtek Tele-RPM scale. |
| <a id="property-viatombponetwocm"></a> `viatomBpOneTwoCm` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYoAAAFdCAIAAACSJ73QAAAACXBIWXMAA…` | Base64 image of the Viatom BP1/BP2 monitor (compact). |
| <a id="property-viatomdevicesmallimage"></a> `viatomDeviceSmallImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAYAAADG4PRLAAAACXBIWXMAA…` | Base64 image of the Viatom device (small). |
| <a id="property-viatomecgbuttondeviceimage"></a> `viatomEcgButtonDeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB5QAAAWACAYAAACWeHp9AAAACXBIWXMAA…` | Base64 image of the Viatom ECG button device. |
| <a id="property-viatomscaledeviceimage"></a> `viatomScaleDeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAA…` | Base64 image of the Viatom Lescale scale. |
| <a id="property-viatomwelluearmfitdeviceimage"></a> `viatomWellueArmfitDeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAA…` | Base64 image of the Viatom Wellue Armfit. |
| <a id="property-viatomwellueoxyfitdeviceimage"></a> `viatomWellueOxyfitDeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAABGdBTUEAA…` | Base64 image of the Viatom Wellue Oxyfit. |
| <a id="property-viatomwellueoxysmartdeviceimage"></a> `viatomWellueOxySmartDeviceImage` | `string` | `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABGdBTUEAA…` | Base64 image of the Viatom Wellue OxySmart. |

***

### DeviceListContext [#devicelistcontext]

```ts
const DeviceListContext: Context<DeviceListContextValue | null>;
```

Context carrying the device list state.

***

### deviceListItems [#devicelistitems]

```ts
const deviceListItems: DeviceListItem[];
```

Default device list, one disconnected entry per supported device.

***

### Devices [#devices]

```ts
const Devices: readonly [{
  creditsForImage: "Viatom official product image: https://www.viatomtech.com/blood-pressure-monitor";
  logo: "https://static.wixstatic.com/media/34caa4_9f911afc220e4832a17af0b44e515915~mv2.j…";
  manufacturer: "Viatom (Lepu Medical)";
  manufacturerKey: "devices.catalog.manufacturers.viatom";
  name: "Viatom BP2";
  nameKey: "devices.catalog.viatom-bp2.name";
}, {
  creditsForImage: "Viatom official product image: https://www.viatomtech.com/bodyscale";
  logo: "https://static.wixstatic.com/media/5118d8_190c0d815e2445b28baa9ca15cbb71fc~mv2.p…";
  manufacturer: "Viatom (Lepu Medical)";
  manufacturerKey: "devices.catalog.manufacturers.viatom";
  name: "Viatom F4 / Lescale";
  nameKey: "devices.catalog.viatom-f4-lescale.name";
}, {
  creditsForImage: "Viatom official product image: https://www.viatomtech.com/pulse-oximeter";
  logo: "https://static.wixstatic.com/media/5118d8_5424b9d2006a4e918e2f9afc2f038f37~mv2.p…";
  manufacturer: "Viatom (Lepu Medical)";
  manufacturerKey: "devices.catalog.manufacturers.viatom";
  name: "Viatom OxySmart / PC60WF";
  nameKey: "devices.catalog.viatom-oxysmart-pc60wf.name";
}, {
  creditsForImage: "Contec official BC401 product page: https://contechealth.com/collections/hot-sal…";
  logo: string;
  manufacturer: "Contec Medical Systems";
  manufacturerKey: "devices.catalog.manufacturers.contec";
  name: "Contec BC401 / BC01";
  nameKey: "devices.catalog.contec-bc401-bc01.name";
}, {
  creditsForImage: "HARTMANN official product image: https://www.hartmann.info/en-za/products/diagno…";
  logo: "https://img.hartmann.info/cdn-cgi/image/width%3D412%2Cheight%3D412%2Cquality%3D9…";
  manufacturer: "HARTMANN";
  manufacturerKey: "devices.catalog.manufacturers.hartmann";
  name: "Veroval duo control";
  nameKey: "devices.catalog.veroval-duo-control.name";
}, {
  creditsForImage: "HARTMANN official product image: https://www.hartmann.info/es-es/productos/monit…";
  logo: "https://img.hartmann.info/cdn-cgi/image/width%3D412%2Cheight%3D412%2Cquality%3D9…";
  manufacturer: "HARTMANN";
  manufacturerKey: "devices.catalog.manufacturers.hartmann";
  name: "Veroval ECG";
  nameKey: "devices.catalog.veroval-ecg.name";
}, {
  creditsForImage: "HARTMANN official product image: https://www.hartmann.info/en/products/diagnosti…";
  logo: "https://cdn.hartmann.info/product/40938_43.jpg";
  manufacturer: "HARTMANN";
  manufacturerKey: "devices.catalog.manufacturers.hartmann";
  name: "Veroval compact+ BPU26";
  nameKey: "devices.catalog.veroval-compact-bpu26.name";
}, {
  creditsForImage: "HARTMANN official product image: https://www.hartmann.info/en/products/diagnosti…";
  logo: "https://cdn.hartmann.info/product/40385_43.jpg";
  manufacturer: "HARTMANN";
  manufacturerKey: "devices.catalog.manufacturers.hartmann";
  name: "Veroval compact+ BPW26";
  nameKey: "devices.catalog.veroval-compact-bpw26.name";
}, {
  creditsForImage: "HARTMANN official product image: https://www.hartmann.info/en/products/diagnosti…";
  logo: "https://cdn.hartmann.info/product/130436_43.jpg";
  manufacturer: "HARTMANN";
  manufacturerKey: "devices.catalog.manufacturers.hartmann";
  name: "Veroval Fusion";
  nameKey: "devices.catalog.veroval-fusion.name";
}, {
  creditsForImage: "Veroval Medi.Connect app artwork from APKPure: https://apkpure.net/veroval%C2%AE…";
  logo: "https://image-eo.winudf.com/v2/image/aW5mby52ZXJvdmFsLm1lZGkuY29ubmVjdF9pY29uXzE…";
  manufacturer: "HARTMANN";
  manufacturerKey: "devices.catalog.manufacturers.hartmann";
  name: "Veroval Activity tracker";
  nameKey: "devices.catalog.veroval-activity.name";
}, {
  creditsForImage: "Original OVOK SDK illustration; generic smartwatch artwork, not a manufacturer p…";
  logo: string;
  manufacturer: "Trasense / Shenzhen Pucheng Technology";
  manufacturerKey: "devices.catalog.manufacturers.trasense";
  name: "Trasense S9 (SH09)";
  nameKey: "devices.catalog.trasense-s9.name";
}, {
  creditsForImage: "boso official product image: https://www.boso.de/en/products-for-home-users/bloo…";
  logo: "https://www.boso.de/fileadmin/_processed_/0/b/csm_medicus_system_1019_9ce057ffcc…";
  manufacturer: "BOSCH + SOHN GmbH u. Co. KG";
  manufacturerKey: "devices.catalog.manufacturers.boso";
  name: "boso medicus system";
  nameKey: "devices.catalog.boso-medicus-system.name";
}, {
  creditsForImage: "visomat official product image: https://www.visomat.de/produkte/comfort-soft-bt/";
  logo: "https://www.visomat.de/wp-content/uploads/2023/10/prd_slider_comfort-soft-BT.jpg";
  manufacturer: "UEBE Medical GmbH";
  manufacturerKey: "devices.catalog.manufacturers.uebe";
  name: "visomat comfort soft BT";
  nameKey: "devices.catalog.visomat-comfort-soft-bt.name";
}, {
  creditsForImage: "cyclotest official product image: https://www.cyclotest.de/produkt/cyclotest-mys…";
  logo: "https://www.cyclotest.de/wp-content/uploads/cyclotest-mysense-basalthermometer-a…";
  manufacturer: "UEBE Medical GmbH";
  manufacturerKey: "devices.catalog.manufacturers.uebe";
  name: "cyclotest mySense";
  nameKey: "devices.catalog.cyclotest-mysense.name";
}, {
  creditsForImage: "Viatom official product image: https://www.viatomtech.com/thermometer";
  logo: "https://static.wixstatic.com/media/34caa4_2b929fc2abc847bba39252b6e2a12a93~mv2.j…";
  manufacturer: "AOJ Medical";
  manufacturerKey: "devices.catalog.manufacturers.aoj";
  name: "AOJ-20A";
  nameKey: "devices.catalog.aoj-20a.name";
}, {
  creditsForImage: "Viatom official Checkme product image: https://www.viatomtech.com/vital-signs-mo…";
  logo: "https://static.wixstatic.com/media/5118d8_c08c5dadeeda4abaa01d032d342b6404~mv2.p…";
  manufacturer: "Viatom (Lepu Medical)";
  manufacturerKey: "devices.catalog.manufacturers.viatom";
  name: "Checkme";
  nameKey: "devices.catalog.checkme.name";
}, {
  creditsForImage: "Viatom official product image: https://www.viatomtech.com/blood-pressure-monitor";
  logo: "https://static.wixstatic.com/media/34caa4_9f911afc220e4832a17af0b44e515915~mv2.j…";
  manufacturer: "Viatom (Lepu Medical)";
  manufacturerKey: "devices.catalog.manufacturers.viatom";
  name: "Viatom BP2A / BP2T / BP2W";
  nameKey: "devices.catalog.viatom-bp2-family.name";
}, {
  creditsForImage: "Viatom official product image: https://www.viatomtech.com/upper-arm-desk-blood-p…";
  logo: "https://static.wixstatic.com/media/c3f028_2bf2ec93f3284fff868b2786a64bc8cc~mv2.j…";
  manufacturer: "Viatom (Lepu Medical)";
  manufacturerKey: "devices.catalog.manufacturers.viatom";
  name: "Viatom BP3 series";
  nameKey: "devices.catalog.viatom-bp3-series.name";
}, {
  creditsForImage: "Viatom official product image: https://www.viatomtech.com/pulse-oximeter";
  logo: "https://static.wixstatic.com/media/5118d8_5424b9d2006a4e918e2f9afc2f038f37~mv2.p…";
  manufacturer: "Viatom (Lepu Medical)";
  manufacturerKey: "devices.catalog.manufacturers.viatom";
  name: "Viatom O2Ring / Oxyfit / KidsO2 / BabyO2";
  nameKey: "devices.catalog.viatom-oximeters.name";
}, {
  creditsForImage: "Viatom official product image: https://www.viatomtech.com/ecg-ekg-monitor";
  logo: "https://static.wixstatic.com/media/c3f028_1cde982861754abaab00abbaae81a697~mv2.p…";
  manufacturer: "Viatom (Lepu Medical)";
  manufacturerKey: "devices.catalog.manufacturers.viatom";
  name: "Viatom ER1 / ER2 / ER3";
  nameKey: "devices.catalog.viatom-er-family.name";
}, {
  creditsForImage: "Viatom official product image: https://www.viatomtech.com/ecg-ekg-monitor";
  logo: "https://static.wixstatic.com/media/c3f028_1cde982861754abaab00abbaae81a697~mv2.p…";
  manufacturer: "Viatom (Lepu Medical)";
  manufacturerKey: "devices.catalog.manufacturers.viatom";
  name: "Viatom Lepod / LepodPro";
  nameKey: "devices.catalog.viatom-lepod-family.name";
}, {
  creditsForImage: "Bluetooth SIG official brand assets: https://www.bluetooth.com/media/";
  logo: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPH…";
  manufacturer: "Any compliant manufacturer";
  manufacturerKey: "devices.catalog.manufacturers.any-compliant";
  name: "Bluetooth SIG blood-pressure devices";
  nameKey: "devices.catalog.bluetooth-sig.blood-pressure.name";
  standardProfile: true;
}, {
  creditsForImage: "Bluetooth SIG official brand assets: https://www.bluetooth.com/media/";
  logo: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPH…";
  manufacturer: "Any compliant manufacturer";
  manufacturerKey: "devices.catalog.manufacturers.any-compliant";
  name: "Bluetooth SIG thermometers";
  nameKey: "devices.catalog.bluetooth-sig.thermometers.name";
  standardProfile: true;
}, {
  creditsForImage: "Bluetooth SIG official brand assets: https://www.bluetooth.com/media/";
  logo: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPH…";
  manufacturer: "Any compliant manufacturer";
  manufacturerKey: "devices.catalog.manufacturers.any-compliant";
  name: "Bluetooth SIG weight scales";
  nameKey: "devices.catalog.bluetooth-sig.weight-scales.name";
  standardProfile: true;
}, {
  creditsForImage: "Bluetooth SIG official brand assets: https://www.bluetooth.com/media/";
  logo: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPH…";
  manufacturer: "Any compliant manufacturer";
  manufacturerKey: "devices.catalog.manufacturers.any-compliant";
  name: "Bluetooth SIG pulse oximeters";
  nameKey: "devices.catalog.bluetooth-sig.pulse-oximeters.name";
  standardProfile: true;
}, {
  creditsForImage: "Bluetooth SIG official brand assets: https://www.bluetooth.com/media/";
  logo: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPH…";
  manufacturer: "Any compliant manufacturer";
  manufacturerKey: "devices.catalog.manufacturers.any-compliant";
  name: "Bluetooth SIG glucose meters";
  nameKey: "devices.catalog.bluetooth-sig.glucose-meters.name";
  standardProfile: true;
}, {
  creditsForImage: "Bluetooth SIG official brand assets: https://www.bluetooth.com/media/";
  logo: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPH…";
  manufacturer: "Any compliant manufacturer";
  manufacturerKey: "devices.catalog.manufacturers.any-compliant";
  name: "Bluetooth SIG heart-rate monitors";
  nameKey: "devices.catalog.bluetooth-sig.heart-rate.name";
  standardProfile: true;
}, SupportedDevice, SupportedDevice, SupportedDevice, SupportedDevice, SupportedDevice, SupportedDevice, SupportedDevice, SupportedDevice, SupportedDevice, SupportedDevice, SupportedDevice, SupportedDevice, SupportedDevice];
```

Concrete devices and device families supported by the Bluetooth module.

The standard Bluetooth SIG entries are included because the SDK exposes factories for
those profiles; the application supplies the advertised device name when registering one.
Every entry has an image value. Existing product assets are reused where available, while
official manufacturer and standards-organization images cover the remaining entries.

***

### LIVE\_DEVICE\_KEYS [#live_device_keys]

```ts
const LIVE_DEVICE_KEYS: ReadonlySet<string>;
```

Built-in devices that send readings continuously while connected rather than one per measurement: the
live oximeters (each value they send is a reading), the PC-100 and PC-300 monitors, the wearable T31
thermometer, the Lepod after its stored recordings, and Bluetooth SIG heart-rate straps (a value a
second). A declaration that keeps a live session (`sessionPolicy`) is live without being listed.

***

### LIVE\_RESULT\_POLICY [#live_result_policy]

```ts
const LIVE_RESULT_POLICY: DeviceResultPolicy;
```

Keeps a live device's whole stream: every live value goes into a series of one-second slots, reported as one
result when it closes (when the device disconnects, after an hour, or 15 minutes without a value). The single measurements a live device also
takes, a blood pressure, a glucose reading or an ECG recording, are each reported. Pass it in `resultPolicies` for
live devices (`resultPoliciesFor` does it for a whole list), with `seriesStorage` so a series survives the app
closing.

***

### SUPPORTED\_ACCEPTED\_DEVICES [#supported_accepted_devices]

```ts
const SUPPORTED_ACCEPTED_DEVICES: readonly AcceptedDevice[];
```

A de-duplicated list ready to pass directly to BTProvider.acceptedDevices.

***

### SUPPORTED\_DEVICES [#supported_devices]

```ts
const SUPPORTED_DEVICES: readonly SupportedDeviceDefinition[] = supportedDevices;
```

Catalog of the supported devices with their metadata.

***

### supportedDevices [#supporteddevices]

```ts
const supportedDevices: readonly SupportedDeviceDefinition[];
```

The catalog with what each product is: its kind, main reading, delivery and keys.
