# Bluetooth device types

Canonical page: https://docs.ovok.com/native-sdk/guide/components/bt-management/device-types

`IntegratedDevices` is the SDK's enum of recognized device keys. It is not, by itself, a promise that every advertised name in the enum has a decoder. Device matching and protocol decoding are separate: a name can be recognized for display while a connection still requires a protocol implementation.

## Use the supported catalog first [#use-the-supported-catalog-first]

`SUPPORTED_DEVICES` contains ready-to-use declarations for catalog entries. Each entry has an `acceptedDevices` array for `BTProvider`. Some display entries have an empty array; do not present those entries as connectable.

~~~tsx
import { SUPPORTED_DEVICES } from "@ovok/native/bt-device";

const selection = SUPPORTED_DEVICES.find(
  (entry) => entry.id === selectedId,
);
const acceptedDevices = selection?.acceptedDevices ?? [];
~~~

The manager currently has built-in device classes for `BP2`, `F4`, `OxySmart`, `Oxyfit`, `mySense`, `BC01`, `TAIDOC TD4216`, `GlucoCheck`, `BGM`, and the three Veroval integrations: duo control, ECG, and activity. It also has a class for Transtek's command protocol, shared by `Transtek BPM`, `Transtek Scale`, `Transtek Scale 1525` and `Transtek Tracker`, which picks the A2 or A3 generation from the services the device exposes. The catalog also includes ready-to-use standard GATT declarations for blood pressure, blood glucose, heart rate, pulse oximetry, temperature, and body weight profiles. The glucose declaration (`standardGlucoseDevice`, Glucose Service 0x1808) asks the meter for its stored records once after connecting: every record, or only those after the newest one already read when the manager has a `recordCursorStorage`. It converts kg/L and mol/L concentrations to mg/dL with one decimal, keeps each record's own timestamp, and adds a `GlucoseRecordDetails` set (sequence number, reported unit, specimen, sample location, `outOfRange` and `sensorStatus`) to the reading. It withholds control-solution tests and records the meter flags as failed tests.

A standard GATT profile is a protocol declaration, not a wildcard. The declaration still needs the device's advertised name or service match. Use the catalog's accepted declarations so the profile, device match, and measurement metadata stay together.

## Add a custom protocol [#add-a-custom-protocol]

When the SDK has no matching implementation, define a custom device and pass the resulting declaration alongside built-in entries. See [Custom devices](/native-sdk/guide/components/bt-management/custom-devices/) for the frame, field, checksum, and registration rules.

The declarative API supports service and characteristic matching, frame selection, result/stream/idle cases, validated measurement fields, optional static writes, and the specialized Lepu/Viatom declaration. A protocol that requires a handshake or command sequence outside those shapes needs an SDK driver.

See [Supported devices](/native-sdk/guide/components/bt-management/supported-devices/), [Bluetooth types](/native-sdk/guide/components/bt-management/types/), and the [Bluetooth guide](/native-sdk/guide/modules/bt-management).
