Espruino:Справочник по API/Класс NRF/setServices(): различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= ==Синтакс...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=<ref>[ www.espruino.com - ]</ref>= | =Функция NRF.setServices()<ref>[https://www.espruino.com/Reference#t_l_NRF_setServices www.espruino.com - NRF.setServices]</ref>= | ||
==Синтаксис== | ==Синтаксис== | ||
<syntaxhighlight lang="javascript" enclose="div"> | <syntaxhighlight lang="javascript" enclose="div"> | ||
NRF.setServices(data, options) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Параметры== | ==Параметры== | ||
* '''data''' – сервис (и характеристики), данные о которых будут рассылаться в объявлениях | |||
* '''options''' – опциональный объект с настройками | |||
==Возвращаемое значение== | ==Возвращаемое значение== | ||
Строка 21: | Строка 22: | ||
==Описание== | ==Описание== | ||
Меняет названия и настройки сервисов и характеристик, которые [[Espruino]] рассылает в объявлениях. | |||
Если вы хотите поменять значение характеристики, вам нужна не эта функция, а [https://www.espruino.com/Reference#l_NRF_updateServices NRF.updateServices()]. | |||
Чтобы показать информацию характеристики ABDC сервиса BCDE, можно сделать вот так: | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
NRF.setServices({ | |||
0xBCDE : { | |||
0xABCD : { | |||
value : "Привет", | |||
readable : true | |||
} | |||
} | |||
}); | |||
</syntaxhighlight> | |||
Или, например, чтобы управлять тремя светодиодами при помощи записи в характеристику чисел от 0 до 7, можно сделать вот так (evt.data – это ArrayBuffer): | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
NRF.setServices({ | |||
0xBCDE : { | |||
0xABCD : { | |||
writable : true, | |||
onWrite : function(evt) { | |||
digitalWrite([LED3,LED2,LED1], evt.data[0]); | |||
} | |||
} | |||
} | |||
}); | |||
</syntaxhighlight> | |||
Вы можете задать множество разных настроек: | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
NRF.setServices({ | |||
0xBCDE : { | |||
0xABCD : { | |||
value : "Привет", // опционально | |||
maxLen : 5, // опционально (или размер исходного значения) | |||
broadcast : false, // опционально (по умолчанию «false») | |||
readable : true, // опционально (по умолчанию «false») | |||
writable : true, // опционально (по умолчанию «false») | |||
notify : true, // опционально (по умолчанию «false») | |||
indicate : true, // опционально (по умолчанию «false») | |||
description: "My Characteristic", // опционально | |||
// по умолчанию «null» | |||
security: { // опционально, см. описание NRF.setSecurity() | |||
read: { // опционально | |||
encrypted: false, // опционально (по умолчанию «false») | |||
mitm: false, // опционально (по умолчанию «false») | |||
lesc: false, // опционально (по умолчанию «false») | |||
signed: false // опционально (по умолчанию «false») | |||
}, | |||
write: { // опционально | |||
encrypted: true, // опционально (по умолчанию «false») | |||
mitm: false, // опционально (по умолчанию «false») | |||
lesc: false, // опционально (по умолчанию «false») | |||
signed: false // опционально (по умолчанию «false») | |||
} | |||
}, | |||
onWrite : function(evt) { // опционально | |||
console.log("Got ", evt.data); // объект ArrayBuffer | |||
} | |||
} | |||
// можно задать больше характеристик | |||
} | |||
// можно задать больше сервисов | |||
}); | |||
</syntaxhighlight> | |||
'''Примечание:''' В UUID характеристик и сервисов можно задавать целые числа в диапазоне от 0 до 0xFFFF, строки в формате "ABCD" или строки в формате "ABCDABCD-ABCD-ABCD-ABCD-ABCDABCDABCD". | |||
Аргумент options может иметь следующий формат: | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
NRF.setServices(undefined, { | |||
hid : new Uint8Array(...), // опционально (по умолчанию «undefined») | |||
// включает поддержку BLE HID | |||
uart : true, // опционально (по умолчанию «true»), | |||
// включает поддержку BLE UART | |||
advertise: [ '180D' ] // опционально; список UUID сервисов, | |||
// которые надо разослать в объявлениях | |||
}); | |||
</syntaxhighlight> | |||
Чтобы включить BLE HID, в настройке hid нужно задать массив c дескриптором отчета HID. Проще всего это сделать с помощью модуля ble_hid_controls или ble_hid_keyboard. | |||
'''Примечание:''' Если просто создать сервис, это еще не значит, что данные о нем будут рассылаться в объявлениях. Во-первых, для этого устройство должно подключиться, а во-вторых, UUID, которые нужно разослать в объявлениях, нужно задать в поле advertise во втором аргументе options. К примеру, код ниже создаст и начнет рассылать в объявлениях данные о сервисе сердцебиения. | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
NRF.setServices({ | |||
0x180D: { // сердцебиение | |||
0x2A37: { // измерение сердцебиения | |||
notify: true, | |||
value : [0x06, heartrate], | |||
} | |||
} | |||
}, { advertise: [ '180D' ] }); | |||
</syntaxhighlight> | |||
В списке UUID для рассылки можно задавать 128-битные UUID, но это может выдать исключение DATA_SIZE, потому что в BLE-пакете объявления недостаточно места для 128-битного UART-идентификатора (и, соответственно, для заданного вами UUID). В этом случае вы можете задать в options настройку uart:false после поля advertise, чтобы отключить UART, но тогда вы не сможете подключиться к консоли Puck.js по Bluetooth. | |||
Если вам обязательно нужно задать два или более 128-битных UUID, вам нужно будет задать собственные пакеты объявлений с неформатированными данными с помощью функции [https://www.espruino.com/Reference#l_NRF_setAdvertising NRF.setAdvertising()]. | |||
'''Примечание:''' Сервисы на Espruino-устройстве можно модифицировать, только если к нему не подключено других устройств, т.к. это требует перезапуска стека Bluetooth. Кроме того, iOS-устройства кэшируют список сервисов, так что приложения вроде nRF Connect могут некорректно показывать старые сервисы даже после того, как вы их модифицировали. Чтобы исправить это, отключите и снова включите Bluetooth на своем iOS-устройстве или воспользуйтесь nRF Connect на Android-устройстве. | |||
'''Примечание:''' Не все комбинации настроек безопасности корректны. Вот корректные варианты: encrypted, encrypted + mitm, lesc, signed, signed + mitm. Более подробно читайте в описании функции [https://www.espruino.com/Reference#l_NRF_setSecurity NRF.setSecurity()]. | |||
== Примеры == | == Примеры == |
Версия от 17:32, 7 февраля 2021
Функция NRF.setServices()[1]
Синтаксис
NRF.setServices(data, options)
Параметры
- data – сервис (и характеристики), данные о которых будут рассылаться в объявлениях
- options – опциональный объект с настройками
Возвращаемое значение
Описание
Меняет названия и настройки сервисов и характеристик, которые Espruino рассылает в объявлениях.
Если вы хотите поменять значение характеристики, вам нужна не эта функция, а NRF.updateServices().
Чтобы показать информацию характеристики ABDC сервиса BCDE, можно сделать вот так:
NRF.setServices({
0xBCDE : {
0xABCD : {
value : "Привет",
readable : true
}
}
});
Или, например, чтобы управлять тремя светодиодами при помощи записи в характеристику чисел от 0 до 7, можно сделать вот так (evt.data – это ArrayBuffer):
NRF.setServices({
0xBCDE : {
0xABCD : {
writable : true,
onWrite : function(evt) {
digitalWrite([LED3,LED2,LED1], evt.data[0]);
}
}
}
});
Вы можете задать множество разных настроек:
NRF.setServices({
0xBCDE : {
0xABCD : {
value : "Привет", // опционально
maxLen : 5, // опционально (или размер исходного значения)
broadcast : false, // опционально (по умолчанию «false»)
readable : true, // опционально (по умолчанию «false»)
writable : true, // опционально (по умолчанию «false»)
notify : true, // опционально (по умолчанию «false»)
indicate : true, // опционально (по умолчанию «false»)
description: "My Characteristic", // опционально
// по умолчанию «null»
security: { // опционально, см. описание NRF.setSecurity()
read: { // опционально
encrypted: false, // опционально (по умолчанию «false»)
mitm: false, // опционально (по умолчанию «false»)
lesc: false, // опционально (по умолчанию «false»)
signed: false // опционально (по умолчанию «false»)
},
write: { // опционально
encrypted: true, // опционально (по умолчанию «false»)
mitm: false, // опционально (по умолчанию «false»)
lesc: false, // опционально (по умолчанию «false»)
signed: false // опционально (по умолчанию «false»)
}
},
onWrite : function(evt) { // опционально
console.log("Got ", evt.data); // объект ArrayBuffer
}
}
// можно задать больше характеристик
}
// можно задать больше сервисов
});
Примечание: В UUID характеристик и сервисов можно задавать целые числа в диапазоне от 0 до 0xFFFF, строки в формате "ABCD" или строки в формате "ABCDABCD-ABCD-ABCD-ABCD-ABCDABCDABCD".
Аргумент options может иметь следующий формат:
NRF.setServices(undefined, {
hid : new Uint8Array(...), // опционально (по умолчанию «undefined»)
// включает поддержку BLE HID
uart : true, // опционально (по умолчанию «true»),
// включает поддержку BLE UART
advertise: [ '180D' ] // опционально; список UUID сервисов,
// которые надо разослать в объявлениях
});
Чтобы включить BLE HID, в настройке hid нужно задать массив c дескриптором отчета HID. Проще всего это сделать с помощью модуля ble_hid_controls или ble_hid_keyboard.
Примечание: Если просто создать сервис, это еще не значит, что данные о нем будут рассылаться в объявлениях. Во-первых, для этого устройство должно подключиться, а во-вторых, UUID, которые нужно разослать в объявлениях, нужно задать в поле advertise во втором аргументе options. К примеру, код ниже создаст и начнет рассылать в объявлениях данные о сервисе сердцебиения.
NRF.setServices({
0x180D: { // сердцебиение
0x2A37: { // измерение сердцебиения
notify: true,
value : [0x06, heartrate],
}
}
}, { advertise: [ '180D' ] });
В списке UUID для рассылки можно задавать 128-битные UUID, но это может выдать исключение DATA_SIZE, потому что в BLE-пакете объявления недостаточно места для 128-битного UART-идентификатора (и, соответственно, для заданного вами UUID). В этом случае вы можете задать в options настройку uart:false после поля advertise, чтобы отключить UART, но тогда вы не сможете подключиться к консоли Puck.js по Bluetooth.
Если вам обязательно нужно задать два или более 128-битных UUID, вам нужно будет задать собственные пакеты объявлений с неформатированными данными с помощью функции NRF.setAdvertising().
Примечание: Сервисы на Espruino-устройстве можно модифицировать, только если к нему не подключено других устройств, т.к. это требует перезапуска стека Bluetooth. Кроме того, iOS-устройства кэшируют список сервисов, так что приложения вроде nRF Connect могут некорректно показывать старые сервисы даже после того, как вы их модифицировали. Чтобы исправить это, отключите и снова включите Bluetooth на своем iOS-устройстве или воспользуйтесь nRF Connect на Android-устройстве.
Примечание: Не все комбинации настроек безопасности корректны. Вот корректные варианты: encrypted, encrypted + mitm, lesc, signed, signed + mitm. Более подробно читайте в описании функции NRF.setSecurity().
Примеры
См.также
Внешние ссылки