BSBtManager
Use el objeto BSBtManager para descubrir si hay adaptadores BLE presentes y para recibir eventos (por ejemplo, cuando se agregan o eliminan adaptadores). También puede usarse para recuperar y modificar la publicidad Bluetooth.
Atributos
El objeto BSBtManager tiene el siguiente atributo:
atributo de solo lectura Adaptadores de matriz: Una lista de todos los adaptadores Bluetooth disponibles. Si esta lista está vacía, no hay adaptadores presentes.
Eventos
Use el callback onBtEvent() para recibir eventos:
- "add-adapter": Se ha agregado un adaptador. El valor informa el nombre del adaptador.
- "startup-complete": Se ha creado la lista inicial de publicidad. Este evento se envía después de cualquier evento inicial "add-adapter". Las aplicaciones deben esperar este evento antes de detectar un adaptador faltante.
- "remove-adapter": Se ha eliminado un adaptador. El valor informa el nombre del adaptador.
- "update-advertising": La publicidad Bluetooth ha cambiado. El valor identifica la fuente del cambio (desde "brightscript" o "javascript"). Si su script mantiene una variable que contiene la lista de publicidad, este evento indica que puede necesitar actualizarse.
Dado que pueden agregarse eventos adicionales en el futuro, su script debe tener la capacidad de manejar eventos no reconocidos.
Ejemplo
btm.onbtevent = function (ev) { console.log("Event " + ev.name + "; parameter " + ev.parameter); }
Métodos
El objeto BSBtManager tiene los siguientes métodos:
- objeto GetCurrentAdvertising(): Devuelve un objeto BSBtAdvertisementList que contiene los parámetros actuales de publicidad.
- boolean StartAdvertising(in object advertisement_list): Comienza a enviar anuncios BLE utilizando el objeto BSBtAdvertisementList especificado. Llamar a este método reemplazará todos los anuncios anteriores, incluidos los anuncios persistentes, independientemente de si fueron configurados desde JavaScript o BrightScript. Para conservar los anuncios, recupere el objeto BSBtAdvertisementList actual y realice los cambios necesarios antes de pasarlo a StartAdvertising().
- StopAdvertising(new BSBtAdvertisementList()): Detiene todos los anuncios.
- void Close(): Cierra la instancia, evitando que siga consumiendo recursos. Si no se llama a este método, la recolección de basura determina cuándo se destruirá la instancia.
- BSBtAdvertisementList: El objeto BSBtAdvertisementList es un contenedor para objetos BSBtAdvertisement . Los elementos pueden agregarse al final de la lista usando push() o eliminarse usando pop(). Puede accederse a los elementos existentes mediante índices.
- BSBtAdvertisement: El objeto BSBtAdvertisement representa un único anuncio BLE. Admite datos de publicidad en formatos estándar o valores personalizados arbitrarios. Los valores de formato estándar pueden inicializarse durante la construcción usando un diccionario, pero los campos personalizados avanzados deben establecerse en el objeto. Los modos compatibles se describen a continuación.
Formato Beacon
Este modo utiliza un formato simple de beaconing:
mode:"beacon"
- beaconUUID: Una representación en cadena de un UUID, que puede estar en formato de 16 bits, 32 bits o 128 bits. Un UUID de 16 bits debe tener exactamente cuatro dígitos hexadecimales sin puntuación; un UUID de 32 bits debe tener exactamente ocho dígitos hexadecimales sin puntuación; y un UUID de 128 bits debe tener puntuación exactamente de la siguiente manera: "cd7b6f81-f738-4cad-aebf-d2a2ea36d996".
- beaconMajor: Un entero que especifica el valor Major de 2 bytes (0 a 65535)
- beaconMinor: Un entero que especifica el valor Minor de 2 bytes (0 a 65535)
- beacon_level:(opcional) Un entero con signo de 8 bits (-127 a 128) que corresponde a la medición del nivel de potencia Tx (en dBm) a 1 metro. El nivel predeterminado es -60.
- beaconManufacturer:(opcional) Un valor entero de 2 bytes (0 a 65535) que especifica el fabricante del beacon. El valor predeterminado es 76 (&H4C).
- conectable:(opcional) Un valor Boolean que indica si el anuncio debe permitir conexión (para GATT u otros servicios). Los anuncios no permiten conexión de manera predeterminada.
- persistente:(opcional) Un valor Boolean que indica si el anuncio debe persistir después de cada reinicio. Los anuncios beacon no son persistentes de manera predeterminada.
Formato Eddystone-URL
Este modo utiliza el formato Eddystone-URL:
mode:"eddystone-url"
- url: La URL que se encapsulará en el paquete de anuncio. Si la URL es demasiado larga para caber en el paquete, la llamada StartAdvertising() devolverá una excepción AbortError que incluye la descripción "Compressed URL is too long".
- tx_power:(opcional) Un valor entero que especifica el nivel de potencia Tx en dBm a 0 metros. El valor predeterminado es -19, que corresponde a un nivel de -60dBm a 1 metro. La práctica de calibración recomendada es medir a 1 metro y sumar 41: por ejemplo, un RSSI de -65dBm da como resultado un valor de -24.
- conectable:(opcional) Un valor Boolean que indica si el anuncio debe permitir conexión (para GATT u otros servicios). Los anuncios no permiten conexión de manera predeterminada.
- persistente:(opcional) Un valor Boolean que indica si el anuncio debe persistir después de cada reinicio. Los anuncios Eddystone-URL no son persistentes de manera predeterminada.
Formato Eddystone-UID
Este modo utiliza el formato Eddystone-UID:
modo:"eddystone-uid"
- nameSpace: Un valor de 10 bytes expresado como 20 dígitos hexadecimales
- instancia: Un valor de 6 bytes expresado como 12 dígitos hexadecimales
- tx_power:(opcional) Un valor entero que especifica el nivel de potencia Tx en dBm a 0 metros. El valor predeterminado es -19, que corresponde a un nivel de -60dBm a 1 metro. La práctica de calibración recomendada es medir a 1 metro y sumar 41: por ejemplo, un RSSI de -65dBm da como resultado un valor de -24.
- conectable:(opcional) Un valor Boolean que indica si el anuncio debe permitir conexión (para GATT u otros servicios). Los anuncios no permiten conexión de manera predeterminada.
- persistente:(opcional) Un valor Boolean que indica si el anuncio debe persistir después de cada reinicio. Los anuncios Eddystone-URL no son persistentes de manera predeterminada.
Formato personalizado
Este modo admite datos personalizados arbitrarios. Los campos binarios se especifican como cadenas codificadas en hexadecimal (p. ej., los valores decimales 12, 128 se especificarían como "0C80"). Todas las listas admiten llamadas push()/pop() e indexación. No se deben incluir valores duplicados.
- modo:"personalizado"
- manufacturerData:(opcional) Un objeto BSBtManufacturerData que contiene los siguientes campos:
- fabricante: Un valor entero sin signo de 16 bits
- datos: Datos binarios
- serviceUUID:(opcional) Una lista de cadenas UUID.
- serviceData:(opcional) Un objeto BSBtUUIDData que contiene los siguientes campos:
- uuid: La cadena UUID
- datos: Datos binarios
- soliciitUUID:(opcional) Una lista de cadenas UUID.
- connectable:(opcional) Un valor Boolean que indica si el anuncio debe poder conectarse (para GATT u otros servicios). Los anuncios no permiten conexión de forma predeterminada.
- persistente:(opcional) Un valor Boolean que indica si el anuncio debe persistir después de cada reinicio. Los anuncios personalizados no son persistentes de forma predeterminada.
Ejemplos
Este script configura un anuncio simple y un anuncio Eddystone-URL, y luego comienza la publicación del anuncio:
ads = new BSBtAdvertisementList();
ad1 = new BSBtAdvertisement({ mode: "beacon", beaconUUID: "41fac221-c8cb-41e7-b011-12d1016dd39e", beaconMajor: 400, beaconMinor: 123});
ads.push(ad1);
ad2 = new BSBtAdvertisement({ mode:"eddystone-url", url: "http://www.brightsign.biz"})
ads.push(ad2);
btm.StartAdvertising(ads);Este script encuentra balizas que coinciden con un UUID y forma una cadena con códigos Major/Minor:
s = "";
for(i = 0; i < adList.length; i++) {
if (adList[i].mode == "beacon"
&& adList[i].beaconUUID == "434b2eb8-c28f-4089-8e7a-1e644bb13b9f") {
s = s + "Beacon: " + adList[i].beaconMajor + "," + adList[i].beaconMinor + " "
}
}Este script busca balizas Eddystone-URL y envía actualizaciones basadas en la URL actual:
btm = new BSBtManager()
adList = btm.GetCurrentAdvertising()
for(i = 0; i < adList.length; i++) {
// Brightsign.biz is now https
if (adList[i].mode == "eddystone-url" && adList[i].url == "http://www.brightsign.biz") {
adList[i].url = "https://www.brightsign.biz"
}
}
btm.StartAdvertising(adList)Este script produce una excepción porque la URL comprimida es demasiado larga:
al = new BSBtAdvertisementList()
ad4 = new BSBtAdvertisement( { mode: "eddystone-url", url:"http://www.brightsign.biz/thisistoolong"} )
al.push(ad4)
b.StartAdvertising(al)