import { ExecOptions } from "./core.ts";
/** 安卓扫描模式 */
export declare enum AndroidScanMode {
    lowPower = 0,
    balanced = 1,
    lowLatency = 2,
    opportunistic = -1
}
/**
 * 扫描蓝牙设备选项
 * @param {string[]} services 按服务筛选
 * @param {string[]} remoteIds 筛选已知的 remoteId（iOS：128 位 guid，android：48 位 mac 地址）
 * @param {string[]} names 按名称筛选（完全匹配）
 * @param {string[]} keywords 按名称筛选（匹配任何子字符串）
 * @param {number} timeout 在指定持续时间后停止扫描
 * @param {int} removeIfGone 如果为 true，将在设备停止显示持续时间后将其移除
 * @param {boolean} androidUsesFineLocation 在运行时请求“ACCESS_FINE_LOCATION”权限
 * @param {boolean} oneByOne 如果为“true”，我们将逐个流式传输每个广告，可能包括重复的广告。如果为 'false'，则对广告进行重复数据删除，并返回设备列表。
 * @param {number} continuousDivisor 有助于提高性能。如果除数为 3，则忽略三分之二的广告，处理三分之一的广告。这减少了平台通道导致的主线程使用。扫描计数是按设备进行的，因此您始终可以从每个设备获得第一个播发。如果除数为 1，则返回所有广告。此参数仅对“continuousUpdates”模式有效。
 * @param {AndroidScanMode} androidScanMode 选择扫描时要使用的 Android 扫描模式
 * @param {boolean} continuousUpdates 如果为“true”，我们会通过处理重复的广告来不断更新“lastSeen”和“rssi”。这需要更多的功率。通常不应使用此选项。
 */
export interface StartScanOptions extends ExecOptions<any, any> {
    services?: string[];
    names?: string[];
    remoteIds?: string[];
    keywords?: string[];
    timeout?: number;
    removeIfGone?: number;
    androidUsesFineLocation?: boolean;
    oneByOne?: boolean;
    continuousDivisor?: number;
    androidScanMode?: AndroidScanMode;
    continuousUpdates?: boolean;
}
/**
 * 连接蓝牙选项
 * @param {string} deviceId 连接蓝牙设备Id
 * @param {int} timeout 连接超时时间
 * @param {int} mtu 仅限 Android。如果设置了，在连接后立即请求更大的 mtu。
 * @param {boolean} autoConnect 找到设备后重新连接。
 */
export interface ConnectOptions extends ExecOptions<any, any> {
    deviceId: string;
    timeout?: number;
    mtu?: number;
    autoConnect?: boolean;
}
/**
 * 断开蓝牙连接选项
 * @param {string} deviceId 连接蓝牙设备Id
 * @param {int} timeout 断开连接超时时间
 * @param {boolean} queue 如果为 true，则将在所有其他操作完成后执行此断开连接请求。如果为 false，则此断开连接请求将立即执行，即跳到 fbp 操作队列的前面，这对于取消正在进行的连接尝试很有用。
 */
export interface DisconnectOptions extends ExecOptions<any, any> {
    deviceId: string;
    timeout?: number;
    queue?: boolean;
}
/** 当前蓝牙状态 */
export declare enum BluetoothAdapterState {
    unknown = 0,
    unavailable = 1,
    unauthorized = 2,
    turningOn = 3,
    on = 4,
    turningOff = 5,
    off = 6
}
/** 蓝牙状态监听回调方法 */
export type BluetoothAdapterStateListener = (result: BluetoothAdapterState) => void;
/** 蓝牙广告数据 */
export interface AdvertisementData {
    advName: string;
    txPowerLevel?: number;
    appearance?: number;
    connectable: boolean;
    manufacturerData: object;
    serviceData: object;
    serviceUuids: string[];
}
/** 蓝牙扫描结果 */
export interface ScanResult {
    device: string;
    advertisementData: AdvertisementData;
    rssi: number;
    timeStamp: string;
}
/** 扫描结果监听回调方法 */
export type ScanResultListener = (result: ScanResult) => void;
