@stoprocent/bleno
Version:
A Node.js module for implementing BLE (Bluetooth Low Energy) peripherals
200 lines (146 loc) • 7.34 kB
TypeScript
/// <reference types="node" />
declare module '@stoprocent/bluetooth-hci-socket' {
type DriverType = any; // Fallback type
interface BindParams {
[key: string]: any;
}
}
declare module '@stoprocent/bleno' {
import { EventEmitter } from 'events';
export type State = 'poweredOn' | 'poweredOff' | 'unauthorized' | 'unsupported' | 'unknown' | 'resetting';
export type Property = 'read' | 'write' | 'indicate' | 'notify' | 'writeWithoutResponse';
export type ConnectionHandle = number | string;
// Common callback types
export type ReadRequestCallback = (result: number, data?: Buffer) => void;
export type UpdateValueCallback = (data?: Buffer) => void;
export type WriteRequestCallback = (result: number) => void;
// Common function types
export type OnReadRequestFn = (handle: ConnectionHandle, offset: number, callback: ReadRequestCallback) => void;
export type OnSubscribeFn = (handle: ConnectionHandle, maxValueSize: number, updateValueCallback: UpdateValueCallback) => void;
export type OnUnsubscribeFn = (handle: ConnectionHandle) => void;
export type OnWriteRequestFn = (handle: ConnectionHandle, data: Buffer, offset: number, withoutResponse: boolean, callback: WriteRequestCallback) => void;
export type OnIndicateFn = (handle: ConnectionHandle) => void;
export type OnNotifyFn = (handle: ConnectionHandle) => void;
export interface CharacteristicOptions {
uuid: string;
properties?: ReadonlyArray<Property> | null;
secure?: ReadonlyArray<Property> | null;
value?: Buffer | null;
descriptors?: ReadonlyArray<Descriptor> | null;
onIndicate?: OnIndicateFn | null;
onNotify?: OnNotifyFn | null;
onReadRequest?: OnReadRequestFn | null;
onSubscribe?: OnSubscribeFn | null;
onUnsubscribe?: OnUnsubscribeFn | null;
onWriteRequest?: OnWriteRequestFn | null;
}
export class Characteristic {
uuid: string;
properties: ReadonlyArray<Property>;
secure: ReadonlyArray<Property>;
value: Buffer | null;
descriptors: ReadonlyArray<Descriptor>;
constructor(options: CharacteristicOptions);
onIndicate: OnIndicateFn;
onNotify: OnNotifyFn;
onReadRequest: OnReadRequestFn;
onSubscribe: OnSubscribeFn;
onUnsubscribe: OnUnsubscribeFn;
onWriteRequest: OnWriteRequestFn;
toString(): string;
readonly RESULT_ATTR_NOT_LONG: number;
readonly RESULT_INVALID_ATTRIBUTE_LENGTH: number;
readonly RESULT_INVALID_OFFSET: number;
readonly RESULT_SUCCESS: number;
readonly RESULT_UNLIKELY_ERROR: number;
static readonly RESULT_ATTR_NOT_LONG: number;
static readonly RESULT_INVALID_ATTRIBUTE_LENGTH: number;
static readonly RESULT_INVALID_OFFSET: number;
static readonly RESULT_SUCCESS: number;
static readonly RESULT_UNLIKELY_ERROR: number;
}
export interface DescriptorOptions {
uuid: string;
value?: Buffer | string | null;
}
export class Descriptor {
uuid: string;
value: Buffer;
constructor(options: DescriptorOptions);
toString(): string;
}
export interface PrimaryServiceOptions {
uuid: string;
characteristics?: ReadonlyArray<Characteristic> | null;
}
export class PrimaryService {
uuid: string;
characteristics: ReadonlyArray<Characteristic>;
constructor(options: PrimaryServiceOptions);
toString(): string;
}
export class Bleno extends EventEmitter {
readonly Characteristic: typeof Characteristic;
readonly Descriptor: typeof Descriptor;
readonly PrimaryService: typeof PrimaryService;
readonly address: string;
readonly mtu: number;
readonly platform: string;
readonly rssi: number;
readonly state: State;
disconnect(): void;
stop(): void;
setAddress(address: string): void;
setServices(services: ReadonlyArray<PrimaryService>, callback?: (arg: Error | undefined | null) => void): void;
startAdvertising(name: string, serviceUuids?: ReadonlyArray<string>, callback?: (arg: Error | undefined | null) => void): void;
startAdvertisingIBeacon(uuid: string, major: number, minor: number, measuredPower: number, callback?: (arg: Error | undefined | null) => void): void;
startAdvertisingWithEIRData(advertisementData: Buffer, callback?: (arg: Error | undefined | null) => void): void;
startAdvertisingWithEIRData(advertisementData: Buffer, scanData: Buffer, callback?: (arg: Error | undefined | null) => void): void;
stopAdvertising(callback?: () => void): void;
updateRssi(callback?: (err: null, rssi: number) => void): void;
// Async methods
waitForPoweredOnAsync(timeout?: number): Promise<void>;
setAddressAsync(address: string): Promise<void>;
setServicesAsync(services: ReadonlyArray<PrimaryService>): Promise<void>;
startAdvertisingAsync(name: string, serviceUuids?: ReadonlyArray<string>): Promise<void>;
startAdvertisingIBeaconAsync(
uuid: string,
major: number,
minor: number,
measuredPower: number
): Promise<void>;
startAdvertisingWithEIRDataAsync(advertisementData: Buffer): Promise<void>;
startAdvertisingWithEIRDataAsync(advertisementData: Buffer, scanData: Buffer): Promise<void>;
stopAdvertisingAsync(): Promise<void>;
updateRssiAsync(): Promise<number>;
on(event: 'stateChange', cb: (state: State) => void): this;
on(event: 'platform', cb: (platform: NodeJS.Platform) => void): this;
on(event: 'addressChange', cb: (address: string) => void): this;
on(event: 'accept', cb: (address: string, handle: ConnectionHandle) => void): this;
on(event: 'mtuChange', cb: (mtu: number) => void): this;
on(event: 'disconnect', cb: (address: string, handle: ConnectionHandle) => void): this;
on(event: 'advertisingStart', cb: (err?: Error | null) => void): this;
on(event: 'advertisingStartError', cb: (err: Error) => void): this;
on(event: 'advertisingStop', cb: () => void): this;
on(event: 'servicesSet', cb: (err?: Error | null) => void): this;
on(event: 'servicesSetError', cb: (err: Error) => void): this;
on(event: 'rssiUpdate', cb: (rssi: number) => void): this;
}
export type BindingType = 'default' | 'hci' | 'mac';
export interface BaseBindingsOptions {
}
export interface HciBindingsOptions extends BaseBindingsOptions {
hciDriver?: import('@stoprocent/bluetooth-hci-socket').DriverType;
bindParams?: import('@stoprocent/bluetooth-hci-socket').BindParams;
}
export interface MacBindingsOptions extends BaseBindingsOptions {
}
export type WithBindingsOptions = HciBindingsOptions | MacBindingsOptions;
export function withBindings(
bindingType?: BindingType,
options?: WithBindingsOptions
): Bleno;
// Define a default export
const BlenoDefault: Bleno;
export default BlenoDefault;
}