Skip to main content

Supported devices

SUPPORTED_DEVICES is the single catalog export for apps that need both display metadata and integration declarations. Every entry has:

type SupportedDeviceDefinition = {
id: string;
name: string;
nameKey: string;
manufacturer: string;
manufacturerKey: string;
logo: string;
creditsForImage: string;
acceptedDevices: readonly AcceptedDevice[];
measurementTypes: readonly MeasurementTypeKey[];
manualUrl?: string;
};

nameKey and manufacturerKey are localization keys. The English strings are fallback metadata; applications can translate the keys without changing the protocol declaration. logo is a local/remote image value selected by the SDK, and creditsForImage is the exact source/credit text to show beside it.

Use the catalog​

import {
SUPPORTED_ACCEPTED_DEVICES,
SUPPORTED_DEVICES,
} from "@ovok/native/bt-device";

const allAcceptedDevices = SUPPORTED_ACCEPTED_DEVICES;
const catalogForPicker = SUPPORTED_DEVICES;

<BTProvider
bleManager={bleManager}
acceptedDevices={allAcceptedDevices}
onDeviceFound={(device) => device.connect()}
/>;

Use one entry's acceptedDevices when an app supports a single model or family:

const bp3 = SUPPORTED_DEVICES.find(
(device) => device.name === "Viatom BP3 series",
);

const acceptedDevices = bp3?.acceptedDevices ?? [];

The app should keep the tuple narrow when it knows the intended device. Passing the whole list is supported, but increases matching and selection work.

Current families​

The catalog covers the built-in identities and declarations for:

  • Lepu/Viatom BP2, BP2A/BP2T/BP2W, BP3 names, F4/Lescale, O2Ring/Oxyfit/KidsO2/BabyO2, R20/R200 sleep-therapy models, ER1/ER2/ER3, Lepod, and LepodPro model names;
  • Contec BC401/BC01, TaiDoc glucose and thermometer models, GlucoCheck, BGM, FORA IR20 and W550, Transtek GBS-2012-B, Andesfit TEMP, cosinuss° devices, cmed, PULMO80B, Le S5, and AliveCor;
  • AOJ-20A, boso medicus system, visomat comfort soft BT, cyclotest mySense, and HARTMANN Veroval duo control, compact+ BPU26/BPW26, ECG, and Activity;
  • standard Bluetooth SIG blood-pressure, heart-rate, pulse-oximeter, thermometer, and weight-scale profile factories.

The catalog entry tells an app what the SDK can identify and decode. A family row does not promise that an unknown firmware payload is understood; the exact model matcher and decoder remain the source of truth.

Clock synchronization​

Every discovered device reports a clockSync capability in deviceData:

CapabilityMeaning
supportedThe SDK has a verified, device-specific clock write.
unsupportedThe device is known not to have a verified clock write in the SDK.
unknownThe SDK must not send a clock command because the protocol is not verified.

Clock writes are opt-in by device and enabled by default only for verified protocols. The BTProvider option below supplies one clock source and an explicit timezone policy:

<BTProvider
bleManager={bleManager}
acceptedDevices={acceptedDevices}
clockSync={{
now: () => new Date(),
timezone: "utc",
enabled: true,
}}
/>

Set enabled: false to skip optional verified clock writes. This does not change history download. cyclotest mySense is the exception: its verified greeting carries the timestamp required to start the history exchange, so the greeting remains intact when synchronization is disabled. The SDK never sends a guessed date command to a device whose capability is unknown or unsupported, and it never rewrites the timezone of historical records.

The verified writes happen at these points:

DeviceWhen the write happensApp guidance
Contec BC401 / BC01After the version reply and before the history count requestKeep enabled when the device clock should be corrected.
cyclotest mySenseIn the required greeting before history acknowledgementThe greeting cannot be removed without changing the protocol exchange.
Viatom O2RingBefore the device-information requestOnly the exact O2Ring declaration opts into this command; other Viatom oximeters remain unknown.
Viatom R20 / R200Before the one-shot therapy-parameter requestSends the verified Ventilator clock command; the returned parameter snapshot has no device timestamp and is dated when received.
HARTMANN Veroval ActivityNo verified writeTreat history as read-only and use the reported reading dates as received.
Other devicesNo verified write in the SDKDo not attempt a generic Bluetooth clock command.

Veroval Activity transport​

The Veroval Activity integration matches the private service 2610fc00-494d-494c-4544-55544954414c, so discovery does not depend on the advertised model name. Its verified characteristics are:

CharacteristicRole
2610fc01-494d-494c-4544-55544954414cEncrypted bonding command
2610fc02-494d-494c-4544-55544954414cToken, summary, daily, and minute commands
2610fc03-494d-494c-4544-55544954414cEncrypted history notifications
2610fc04-494d-494c-4544-55544954414cSecondary notifications; subscribed but not parsed

The bonding command is sent only to FC01; all other requests use FC02. FC01 does not emit a protocol acknowledgement on FC03, so the summary request follows the successful transport write directly. Notifications use the device's encrypted chunk format and end at FF FF. Daily records are 32 bytes, and the minute response starts with an eight-byte empty sentinel before its compressed records. The FC04 subscription is optional at the device level, so peripherals that do not emit it continue to work. The current public result contract reports step-count and heart-rate history only.

Veroval duo control history measurements also expose the device metadata memorySlot (1 or 2) and recordedAt. recordedAt is the timestamp stored in the monitor, so applications can preserve the measurement time instead of using the download time.

Images and credits​

Do not remove creditsForImage when building a custom picker. Render the image and the exact credit together, and keep the catalog's attribution URL/text intact. The catalog uses official manufacturer/product pages where available and a Bluetooth SIG brand asset for generic profile rows. It does not claim that a generic profile image is the image of a particular manufacturer's device.

Manuals and unsupported products​

manualUrl is present only when the SDK has an official manual reference. A product not present in the catalog can still be integrated by declaring it with defineCustomDevice. A custom declaration is app-owned and must not reuse a built-in id or pretend that a family image proves protocol support.