UNPKG

react-native-ble-manager

Version:
372 lines (371 loc) 10.6 kB
/** * android states: https://developer.android.com/reference/android/bluetooth/BluetoothAdapter#EXTRA_STATE * ios states: https://developer.apple.com/documentation/corebluetooth/cbcentralmanagerstate * */ export declare enum BleState { /** * [iOS only] */ Unknown = "unknown", /** * [iOS only] */ Resetting = "resetting", Unsupported = "unsupported", /** * [iOS only] */ Unauthorized = "unauthorized", On = "on", Off = "off", /** * [android only] */ TurningOn = "turning_on", /** * [android only] */ TurningOff = "turning_off" } export interface Peripheral { id: string; rssi: number; name?: string; advertising: AdvertisingData; } export interface AdvertisingData { isConnectable?: boolean; localName?: string; rawData?: CustomAdvertisingData; manufacturerData?: Record<string, CustomAdvertisingData>; manufacturerRawData?: CustomAdvertisingData; serviceData?: Record<string, CustomAdvertisingData>; serviceUUIDs?: string[]; txPowerLevel?: number; } export interface CustomAdvertisingData { CDVType: 'ArrayBuffer'; /** * data as an array of numbers (which can be converted back to a Uint8Array (ByteArray), * using something like [Buffer.from()](https://github.com/feross/buffer)) */ bytes: number[]; /** * base64-encoded string of the data */ data: string; } export interface StartOptions { /** * [iOS only] */ showAlert?: boolean; /** * [iOS only] */ restoreIdentifierKey?: string; /** * [iOS only] */ queueIdentifierKey?: string; /** * [android only] */ forceLegacy?: boolean; } export interface ConnectOptions { /** * [android only] */ autoconnect?: boolean; /** * [android only] */ phy?: BleScanPhyMode; } /** * [android only] * https://developer.android.com/reference/android/bluetooth/le/ScanSettings */ export interface ScanOptions { /** * This will only works if a ScanFilter is active. Otherwise, may not retrieve any result. * See https://developer.android.com/reference/android/bluetooth/le/ScanSettings#MATCH_NUM_FEW_ADVERTISEMENT. * */ numberOfMatches?: BleScanMatchCount; matchMode?: BleScanMatchMode; /** * This will only works if a ScanFilter is active. Otherwise, may not retrieve any result. * See https://developer.android.com/reference/android/bluetooth/le/ScanSettings#CALLBACK_TYPE_FIRST_MATCH. * Also read [this issue](https://github.com/dariuszseweryn/RxAndroidBle/issues/561#issuecomment-532295346) for a deeper understanding * of the very brittle stability of ScanSettings on android. * */ callbackType?: BleScanCallbackType; scanMode?: BleScanMode; /** * This is supposed to push results after a certain delay. * In practice it is tricky, use with caution. * Do not set something below 5000ms as it will wait that long anyway before pushing the first results, * or on some phones it will ignore that setting and behave just like it was set to 0. * Set your minimum scan duration accordingly, otherwise you will not retrieve the batched results. * https://developer.android.com/reference/android/bluetooth/le/ScanSettings.Builder#setReportDelay(long) */ reportDelay?: number; /** * Does not work in conjunction with legacy scans. Setting an unsupported PHY will result in a failure to scan, * use with caution. * https://developer.android.com/reference/android/bluetooth/le/ScanSettings.Builder#setPhy(int) */ phy?: BleScanPhyMode; /** * true by default for compatibility with older apps. * In that mode, scan will only retrieve advertisements data as specified by BLE 4.2 and below. * Change this if you want to benefit from the extended BLE 5 advertisement spec. * https://developer.android.com/reference/android/bluetooth/le/ScanSettings.Builder#setLegacy(boolean) */ legacy?: boolean; /** * an android ScanFilter, used if present to restrict scan results to devices with a specific advertising name. * This is a whole word match, not a partial search. * Use with caution, it's behavior is tricky and seems to be the following: * if `callbackType` is set to `AllMatches`, only the completeLocalName will be used for filtering. * if `callbackType` is set to `FirstMatch`, the shortenedLocalName will be used for filtering. * https://developer.android.com/reference/android/bluetooth/le/ScanFilter.Builder#setDeviceName(java.lang.String) */ exactAdvertisingName?: string | string[]; /** * Android only. Filters scan results by manufacturer id and data. * `manufacturerId` usually matches the company id, can be given as a hex, e.g. 0xe4f7. * `manufacturerData` and `manufacturerDataMask` must have the same length. For any bit in the mask, set it to 1 if * it needs to match the one in manufacturer data, otherwise set it to 0. * https://developer.android.com/reference/android/bluetooth/le/ScanFilter.Builder#setManufacturerData(int,%20byte[],%20byte[]) */ manufacturerData?: { manufacturerId: number; manufacturerData?: number[]; manufacturerDataMask?: number[]; }; /** * When using compaion mode, only associate single peripheral. * * See: https://developer.android.com/reference/android/companion/AssociationRequest.Builder#setSingleDevice(boolean) */ single?: boolean; companion?: boolean; } export interface CompanionScanOptions { /** * Scan only for a single peripheral. */ single?: boolean; } /** * [android only] */ export declare enum BleScanMode { Opportunistic = -1, LowPower = 0, Balanced = 1, LowLatency = 2 } /** * [android only] */ export declare enum BleScanMatchMode { Aggressive = 1, Sticky = 2 } /** * [android only] */ export declare enum BleScanCallbackType { AllMatches = 1, FirstMatch = 2, MatchLost = 4 } /** * [android only] */ export declare enum BleScanMatchCount { OneAdvertisement = 1, FewAdvertisements = 2, MaxAdvertisements = 3 } /** * [android only] */ export declare enum BleScanPhyMode { LE_1M = 1, LE_2M = 2, LE_CODED = 3, ALL_SUPPORTED = 255 } /** * [android only API 21+] */ export declare enum ConnectionPriority { balanced = 0, high = 1, low = 2 } export interface Service { uuid: string; } export interface Descriptor { value: string; uuid: string; } export interface Characteristic { /** * See https://developer.apple.com/documentation/corebluetooth/cbcharacteristicproperties */ properties: { Broadcast?: 'Broadcast'; Read?: 'Read'; WriteWithoutResponse?: 'WriteWithoutResponse'; Write?: 'Write'; Notify?: 'Notify'; Indicate?: 'Indicate'; AuthenticatedSignedWrites?: 'AuthenticatedSignedWrites'; ExtendedProperties?: 'ExtendedProperties'; NotifyEncryptionRequired?: 'NotifyEncryptionRequired'; IndicateEncryptionRequired?: 'IndicateEncryptionRequired'; }; characteristic: string; service: string; descriptors?: Descriptor[]; } export interface PeripheralInfo extends Peripheral { serviceUUIDs?: string[]; characteristics?: Characteristic[]; services?: Service[]; } export declare enum BleEventType { BleManagerDidUpdateState = "BleManagerDidUpdateState", BleManagerStopScan = "BleManagerStopScan", BleManagerDiscoverPeripheral = "BleManagerDiscoverPeripheral", BleManagerDidUpdateValueForCharacteristic = "BleManagerDidUpdateValueForCharacteristic", BleManagerConnectPeripheral = "BleManagerConnectPeripheral", BleManagerDisconnectPeripheral = "BleManagerDisconnectPeripheral", /** * [Android only] */ BleManagerPeripheralDidBond = "BleManagerPeripheralDidBond", /** * [iOS only] */ BleManagerCentralManagerWillRestoreState = "BleManagerCentralManagerWillRestoreState", /** * [iOS only] */ BleManagerDidUpdateNotificationStateFor = "BleManagerDidUpdateNotificationStateFor" } export interface BleStopScanEvent { /** * [iOS only] */ status?: number; } export interface BleManagerDidUpdateStateEvent { state: BleState; } export interface BleConnectPeripheralEvent { /** * peripheral id */ readonly peripheral: string; /** * [android only] */ readonly status?: number; } export type BleDiscoverPeripheralEvent = Peripheral; /** * [Android only] */ export type BleBondedPeripheralEvent = Peripheral; export interface BleDisconnectPeripheralEvent { /** * peripheral id */ readonly peripheral: string; /** * [android only] disconnect reason. */ readonly status?: number; /** * [iOS only] disconnect error domain. */ readonly domain?: string; /** * [iOS only] disconnect error code. */ readonly code?: number; } export interface BleManagerDidUpdateValueForCharacteristicEvent { /** * characteristic UUID */ readonly characteristic: string; /** * peripheral id */ readonly peripheral: string; /** * service UUID */ readonly service: string; /** * data as an array of numbers (which can be converted back to a Uint8Array (ByteArray), * using something like [Buffer.from()](https://github.com/feross/buffer)) */ readonly value: number[]; } /** * [iOS only] */ export interface BleManagerDidUpdateNotificationStateForEvent { /** * peripheral id */ readonly peripheral: string; /** * characteristic UUID */ readonly characteristic: string; /** * is the characteristic notifying or not */ readonly isNotifying: boolean; /** * error domain */ readonly domain: string; /** * error code */ readonly code: number; } /** * [iOS only] */ export interface BleManagerCentralManagerWillRestoreState { peripherals: Peripheral[]; } /** * [Android only] * * Associate callback received a failure or failed to start the intent to * pick the device to associate. */ export type BleManagerCompanionFailure = { error: string; }; /** * [Android only] * * User picked a device to associate with. * * Null if the request was cancelled by the user. */ export type BleManagerCompanionPeripheral = Peripheral | null;