// src/profiles/standard-commands.ts import type { BackendIdentity } from '../backend-contract/identity' import type { PublicOperationOptions, SubscriptionOptions, WritePolicy, WriteReceipt } from '../backend-contract/operations' import type { DiscoveredGattDatabase, Subscription } from '../manager' import { parseBatteryLevel, batteryLevelSelector } from './battery-service' import { bloodPressureMeasurementSelector } from './blood-pressure' import { decodeDeviceInformationString, deviceInformationStringSelector, parsePnpId, parseSystemId, pnpIdSelector, systemIdSelector, type DeviceInformationStringField, type PnpId, type SystemId } from './device-information' import { bodySensorLocationSelector, encodeResetEnergyExpended, heartRateControlPointSelector, heartRateMeasurementSelector, parseBodySensorLocation } from './heart-rate' import { temperatureMeasurementSelector } from './health-thermometer' import { readCharacteristic, subscribeCharacteristic, writeCharacteristic, type CharacteristicSelectorOptions } from './commands' export async function readBatteryLevel>( database: DiscoveredGattDatabase, options: PublicOperationOptions, occurrence: CharacteristicSelectorOptions = {} ): Promise { return parseBatteryLevel(await readCharacteristic(database, batteryLevelSelector(occurrence), options)) } export async function readDeviceInformationString< Attachment extends string, Identity extends BackendIdentity >( database: DiscoveredGattDatabase, field: DeviceInformationStringField, options: PublicOperationOptions, occurrence: CharacteristicSelectorOptions = {} ): Promise { return decodeDeviceInformationString( await readCharacteristic(database, deviceInformationStringSelector(field, occurrence), options) ) } export async function readSystemId>( database: DiscoveredGattDatabase, options: PublicOperationOptions, occurrence: CharacteristicSelectorOptions = {} ): Promise { return parseSystemId(await readCharacteristic(database, systemIdSelector(occurrence), options)) } export async function readPnpId>( database: DiscoveredGattDatabase, options: PublicOperationOptions, occurrence: CharacteristicSelectorOptions = {} ): Promise { return parsePnpId(await readCharacteristic(database, pnpIdSelector(occurrence), options)) } export async function readBodySensorLocation>( database: DiscoveredGattDatabase, options: PublicOperationOptions, occurrence: CharacteristicSelectorOptions = {} ): Promise { return parseBodySensorLocation(await readCharacteristic(database, bodySensorLocationSelector(occurrence), options)) } export function subscribeHeartRateMeasurements>( database: DiscoveredGattDatabase, options: SubscriptionOptions, occurrence: CharacteristicSelectorOptions = {} ): Promise> { return subscribeCharacteristic(database, heartRateMeasurementSelector(occurrence), options) } export function resetHeartRateEnergyExpended>( database: DiscoveredGattDatabase, options: WritePolicy, occurrence: CharacteristicSelectorOptions = {} ): Promise> { return writeCharacteristic(database, heartRateControlPointSelector(occurrence), encodeResetEnergyExpended(), options) } export function subscribeTemperatureMeasurements< Attachment extends string, Identity extends BackendIdentity >( database: DiscoveredGattDatabase, options: SubscriptionOptions, occurrence: CharacteristicSelectorOptions = {} ): Promise> { return subscribeCharacteristic(database, temperatureMeasurementSelector(occurrence), options) } export function subscribeBloodPressureMeasurements< Attachment extends string, Identity extends BackendIdentity >( database: DiscoveredGattDatabase, options: SubscriptionOptions, occurrence: CharacteristicSelectorOptions = {} ): Promise> { return subscribeCharacteristic(database, bloodPressureMeasurementSelector(occurrence), options) }