Espruino:Справочник по API/Класс NRF/setScan()
Функция NRF.setScan()[1]
Синтаксис
NRF.setScan(callback, options)
Параметры
- callback – функция обратного вызова, где аргументом будет полученный пакет объявления, или undefined, чтобы остановить прослушку BLE-пакетов объявлений
- options – опциональный объект в формате {filters: ...} (такой передается в качестве аргумента, например, функции NRF.requestDevice()) для фильтрации устройств
Возвращаемое значение
Описание
Останавливает/запускает прослушку BLE-пакетов объявлений в ближайшем диапазоне. Возвращает BluetoothDevice для каждого присланного пакета. По умолчанию это неактивное сканирование, так что пакеты с ответом на сканирование возвращены не будут (см. ниже).
// запускаем сканирование:
packets=10;
NRF.setScan(function(d) {
packets--;
if (packets<=0)
NRF.setScan(); // останавливаем сканирование
else
console.log(d); // печатаем данные пакета в консоли
});
Каждый возвращенный объект BluetoothDevice будет выглядеть примерно вот так:
BluetoothDevice {
"id": "aa:bb:cc:dd:ee:ff", // адрес
"rssi": -89, // мощность сигнала
"services": [ "128bit-uuid", ... ], // UUID сервисов
// (возможно, будет пусто)
"data": new Uint8Array([ ... ]).buffer, // объект ArrayBuffer
// с возвращенными данными
"serviceData" : { "0123" : [ 1 ] }, // если в «data» данные сервиса,
// они будут находиться здесь
"manufacturer" : 0x1234, // если в «data» данные производителя,
// здесь будет 16-битный ID производителя
"manufacturerData" : [...], // если в «data» данные производителя,
// они будут находиться здесь
"name": "DeviceName" // название устройства,
// рассылаемое в объявлениях
}
Во втором аргументе options можно задать набор фильтров (более подробно о них читайте в описании функции NRF.requestDevice()), что позволит отфильтровать устройства, от которых вы хотите получить пакеты объявлений. Это позволяет сократить время обработки JavaScript-кода в местах, где много Bluetooth-объявлений. Например, чтобы искать лишь устройства с ID производителя 0x0590 (это ID устройств Espruino), можно воспользоваться вот таким кодом:
NRF.setScan(function(d) {
console.log(d.manufacturerData);
}, { filters: [{ manufacturerData:{0x0590:{}} }] });
Кроме того, во втором аргументе можно задать active:true, чтобы сканирование было активным (у найденных устройств будет запрашиваться ответ на сканирование).
Примеры
См.также
Внешние ссылки