react-native-ble-manager
Version:
A BLE module for react native.
372 lines (371 loc) • 10.6 kB
TypeScript
/**
* 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;