BSBtManager
11 min
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 https //github com/google/eddystone/tree/master/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 https //github com/google/eddystone/tree/master/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)