Referencia de objeto
Los reproductores BrightSign utilizan una biblioteca estandarizada de objetos BrightScript para exponer funcionalidades para el desarrollo de software. Para publicar una nueva API para interactuar con el hardware de BrightSign, creamos un nuevo objeto BrightScript.
Las páginas de esta sección proporcionan definiciones para objetos que pueden utilizarse en BrightScript. Se proporciona una breve descripción, una lista de interfaces y las funciones miembro de las interfaces para cada clase de objeto. Aunque la mayoría de los objetos BrightScript tienen páginas independientes, algunos objetos se agrupan en la misma página si están estrechamente relacionados o dependen unos de otros para su funcionalidad.
Aquí se muestra un ejemplo de objetos que se utilizan con frecuencia al crear aplicaciones en BrightScript:
| |
|---|---|
Configura la salida de video e interactúa con pantallas utilizando CEC/EDID. | |
roRectangleroRectangle | Se utiliza para definir zonas/widgets en la pantalla. Este objeto se pasa a muchos otros objetos para definir su área de pantalla, incluidos roVideoPlayer, roImagePlayer, roImageWidget, roHtmlWidget, roClockWidget, y roCanvasWidget. |
Reproduce archivos de video, transmisiones y entrada HDMI®. | |
roImagePlayerroImagePlayer | Muestra imágenes. |
roHtmlWidgetroHtmlWidget | Muestra contenido HTML local o remoto utilizando el motor de renderizado Chromium. |
roNetworkConfigurationroNetworkConfiguration | Se utiliza para configurar parámetros de Ethernet, WiFi y red local. |
roDeviceInforoDeviceInfo | Se utiliza para recuperar una amplia variedad de información del sistema, incluidos el tipo de modelo, el número de serie del dispositivo y la versión del firmware. |
Interfaces y métodos
Cada objeto BrightScript consta de una o más "interfaces". Una interfaz consta de uno o más "métodos". Por ejemplo, el objeto roVideoPlayer tiene varias interfaces, incluida ifMessagePort. La interfaz ifMessagePort tiene un método: SetPort().
La interfaz abstracta ifMessagePort está expuesta e implementada tanto por los objetos roControlPort como por roVideoPlayer . Una vez que se llama al método SetPort(), estos objetos enviarán sus eventos al puerto de mensajes proporcionado. Esto se analiza más detalladamente en la sección Event Loops a continuación.
Ejemplo
p = CreateObject("roMessagePort")
video = CreateObject("roVideoPlayer")
gpio = CreateObject("roControlPort", "BrightSign")
gpio.SetPort(p)
video.SetPort(p) La sintaxis anterior utiliza un atajo proporcionado por el lenguaje: el nombre de la interfaz es opcional, a menos que sea necesario para resolver conflictos de nombres. Por ejemplo, las siguientes dos líneas de código realizan exactamente la misma función:
gpio.SetPort(p)
gpio.ifMessagePort.SetPort(p)Los objetos BrightScript constan únicamente de interfaces, y las interfaces definen únicamente métodos. No existe el concepto de una "propiedad" o variable en el nivel de objeto o interfaz. Estos deben implementarse como métodos "set" o "get" en una interfaz.
Clases
Se utiliza un nombre de clase para crear un objeto BrightScript. Por ejemplo, el nombre de clase para una instancia de reproducción de video es roVideoPlayer, por lo tanto, para inicializar una instancia de reproducción de video, utilizaría código similar al siguiente:
Ejemplo
video = CreateObject("roVideoPlayer")Tenga en cuenta que "video" puede ser cualquier nombre que siga la sintaxis descrita en la siguiente sección.
Sintaxis de nombres de objetos y clases
Los nombres de clase tienen las siguientes características:
- Deben comenzar con un carácter alfabético (a – z).
- Pueden constar de caracteres alfabéticos, números o el símbolo "_" (es decir, guion bajo).
- No distinguen entre mayúsculas y minúsculas.
- Pueden tener cualquier longitud razonable.
Zonas
Con la función BrightSign Zones, puede dividir la pantalla en rectángulos y reproducir contenido diferente en cada rectángulo.
Dependiendo del modelo BrightSign, las zonas pueden contener video, imágenes, contenido HTML, audio, un reloj o texto. Los modelos 4Kx42, XDx32 y XDx30 pueden mostrar dos zonas de video en pantalla, mientras que los modelos HDx22, HDx20 y LSx22 solo pueden mostrar una. Puede haber múltiples zonas de otros tipos en la pantalla. Una zona de texto puede contener cadenas de texto simples o configurarse para mostrar una fuente RSS en una visualización tipo ticker.
A partir del firmware 6.0.x, el soporte de zonas está habilitado de forma predeterminada. Cuando las zonas están habilitadas, la capa de imagen está sobre la capa de video de forma predeterminada. El comportamiento predeterminado puede modificarse utilizando el métodoroVideoMode.SetGraphicsZOrder() .
El soporte de zonas puede deshabilitarse llamando a EnableZoneSupport(false). Cuando las zonas no están habilitadas, la capa de imagen se oculta cada vez que se reproduce video, y la capa de video se oculta cada vez que se reproducen imágenes.
Bucles de eventos
Al escribir cualquier cosa más que un script muy simple, será necesario crear un "bucle de eventos". Los bucles de eventos suelen tener la siguiente estructura:
- Esperar un evento.
- Procesar el evento.
- Volver al paso 1.
Un evento puede ser cualquier cantidad de ocurrencias: se ha presionado un botón; se ha activado un temporizador; se ha recibido un mensaje UDP; un video ha terminado de reproducirse; etc. Por convención, el scripting de eventos para objetos BrightScript sigue este flujo de trabajo:
- El script crea un objeto del tipo roMessagePort .
- Los objetos que pueden enviar eventos (es decir, aquellos que admiten la interfaz ifMessagePort/ifSetMessagePort ) reciben instrucciones para enviar sus eventos a este puerto de mensajes utilizando el método SetPort() . Puede configurar múltiples puertos de mensajes y hacer que cada evento vaya a su propio puerto de mensajes, pero normalmente es más sencillo crear un puerto de mensajes y hacer que todos los eventos se envíen a este único puerto.
- El script espera un evento utilizando la instrucción integrada Wait() (o el método ifMessagePort.WaitMessage() ).
- Si se asignan múltiples instancias de objetos al mismo puerto de mensajes, el script determina de qué instancia se originó el evento y luego lo procesa. El script vuelve después a la instrucción Wait() .
Ejemplo
'Listens for UDP messages on two different ports and displays the image file requested in the UDP message body.
mp = CreateObject("roMessagePort")
udp1 = CreateObject("roDatagramReceiver", 3000)
udp1.SetPort(mp)
udp1.SetUserData("port 3000")
udp2 = CreateObject("roDatagramReceiver", 5000)
udp2.SetPort(mp)
udp2.SetUserData("port 5000")
r = CreateObject("rorectangle",0, 0, 1920, 1080)
img = CreateObject("roImagePlayer")
img.SetRectangle(r)
loop:
event = Wait(0, mp)
if type(event) = "roDatagramEvent"
print "Image play command received on " + event.GetUserData() + "."
img = DisplayFile("SD:/" + event.GetString())
endif
endif
goto loop