roControlPort
Este objeto proporciona soporte para las placas de botones USB BP200/BP900, los puertos GPIO y los botones laterales en el reproductor BrightSign. Las pulsaciones de botones se devuelven como eventos roControlUp y roControlDown . El objeto se utiliza para configurar niveles de salida en el conector de E/S y supervisar entradas. Normalmente, los LED y botones se conectan al conector GPIO en el reproductor BrightSign o en el BrightSign Expansion Module.
El equivalente en JavaScript es puerto de controlcontrolport.
Creación del objeto: El objeto roControlPort se crea con un único parámetro que especifica el puerto que se está utilizando.
CreateObject("roControlPort", port As String)El parámetro port puede ser uno de los siguientes:
- BrightSign: Especifica el conector GPIO integrado (incluido el botón SVC (GPIO12)).
- Expander-GPIO: Especifica el conector DB-25 en el BrightSign Expansion Module. Si no hay ningún BrightSign Expansion Module conectado, la creación del objeto fallará y se devolverá Invalid.
- Expander-<n>-GPIO: Especifica un dispositivo USB-to-GPIO conectado al reproductor. Se pueden controlar múltiples dispositivos USB-to-GPIO utilizando instancias separadas de roControlPort : El primer dispositivo corresponde a "Expander-0-GPIO", el segundo a "Expander-1-GPIO", etc.
- Expander-DIP: Especifica los ocho interruptores DIP en el BrightSign Expansion Module. Si no hay ningún BrightSign Expansion Module conectado, la creación del objeto fallará y se devolverá Inválido.
La conexión en caliente del BrightSign Expansion Module no es compatible.
- Touchboard-<n>-GPIO: Recupera eventos de la placa de botones BP200/BP900 especificada. Los eventos se manejan de la misma manera que los eventos del puerto BrightSign.
- Touchboard-<n>-LED-SETUP: Configura varias opciones de salida LED para la placa de botones BP200/BP900 especificada.
- Touchboard-<n>-LED: Configura los bits para cada botón en la placa de botones BP200/BP900 especificada. Los bits indican si el LED asociado debe estar encendido o apagado.
Dado que se pueden conectar varias placas de botones BP200/BP900 a un reproductor simultáneamente, el valor <n> especifica la enumeración de puerto de cada placa. Este valor corresponde al valor <raw> o <fid> devuelto por el método roDeviceInfo.GetUSBTopology()roDeviceInfo.GetUSBTopology(). Un valor de enumeración no especificado es sinónimo de una placa de botones con un valor de enumeración de 0 (por ejemplo, Touchboard-GPIO y Touchboard-0-GPIO son idénticos).
ifControlPort
Los números de "button" descritos a continuación no son los mismos que los números de "pin" GPIO: Algunos pines actúan como fuente de alimentación o tierra, por lo que no se incluyen en el esquema de numeración de botones. Consulte el manual de hardware asociado con su modelo de reproductor para ver una asignación de botones a pines.
GetVersion() As String
Devuelve el número de versión del firmware (ya sea el firmware principal BrightSign o el firmware del BrightSign Expansion Module) responsable del puerto de control.
EnableOutput(button As Integer) As Boolean
Marca el botón especificado como una salida. Si se pasa un número de botón no válido, falso será devuelto. Si la operación es exitosa, la función devuelve verdadero. La salida se establecerá en alto o bajo dependiendo del estado de salida actual del pin.
EnableInput(button As Integer) As Boolean
Marca el botón especificado como una entrada. Si se pasa un número de botón no válido, falso será devuelto. Si la operación es exitosa, la función devuelve verdadero. El botón quedará en estado tri-state y podrá ser llevado a alto o bajo externamente.
EnableAlternateFunction(button As Integer, pin_function As String) As Boolean
Habilita una función alternativa en un botón GPIO. Este método se aplica al conector GPIO integrado y actualmente es compatible con los modelos XTx44, XTx43, XDx34, XDx33, HDx24, HDx23 y HO523.
El primer argumento especifica el número del botón GPIO (entre 0 y 7). El segundo argumento especifica la configuración de función alternativa; la siguiente tabla describe la posible configuración alternativa para cada pin:
Pin GPIO | Número de botón | Función alternativa |
|---|---|---|
3 | 0 | "serial1" (Rx) |
4 | 1 | "irin1" |
5 | 2 | "irout" (solo HDx23, HO523) |
6 | 3 | N/A |
9 | 4 | "serial0" (Rx - puerto de consola)* |
10 | 5 | "serial0" (Tx)* |
11 | 6 | "serial1" (Tx) |
12 | 7 | N/A |
*Los modelos que no tienen un puerto serie de 3,5 mm (p. ej., HD223, XD233) no admiten el puerto serie 0.
Para revertir un botón GPIO a su función principal, especifique pin_function como "gpio".
GetWholeState() As Integer
Devuelve el estado de todas las entradas conectadas al puerto de control como bits en un entero. Los botones individuales se pueden comprobar mediante operaciones binarias, aunque normalmente es más fácil llamar a IsInputActive() en su lugar.
IsInputActive(button As Integer) As Boolean
Devuelve el estado de la entrada especificada. Si el botón no está configurado como una entrada, el resultado no está definido.
SetWholeState(state As Integer) As Boolean
Especifica el estado deseado de todas las salidas conectadas al puerto de control como bits en un entero. Los botones individuales se pueden configurar mediante operaciones binarias, aunque normalmente es más fácil llamar a SetOutputState() en su lugar.
Ejemplo
port = CreateObject("roControlPort", "BrightSign")
gpio1 = 2 '2^1
gpio3 = 8 '2^3
gpio5 = 32 '2^5
gpio7 = 128 '2^7
port.SetWholeState(gpio1 + gpio2 + gpio5 + gpio7) 'turns on ports 1, 3, 5, and 7SetOutputState(button As Integer, level As Boolean) As Boolean
Configura la salida del pin especificado, que puede ser "off" (0) o "on" (1). Si el botón no está configurado como una salida, el nivel resultante no está definido. Este método también se puede utilizar para configurar el comportamiento de salida LED en placas de botones BP200/B900; consulte la sección Configuración de BP200/BP900 a continuación para obtener más detalles.
SetOutputValue(offset As Integer, bit-mask As Integer) As Boolean
Configura un botón en una placa de botones BP200/BP900. Este método solo se puede utilizar cuando el objeto roControlPort se instancia con el parámetro Touchboard-<n>-LED-SETUP o Touchboard-<n>-LED . Consulte la sección Configuración de BP200/BP900 a continuación para obtener más detalles.
SetOutputValues(values As roAssociativeArray) As Boolean
Configura botones en una placa de botones BP200/BP900. Este método solo se puede utilizar cuando el objeto roControlPort se instancia con el parámetro Touchboard-<n>-LED-SETUP o Touchboard-<n>-LED . Consulte la sección Configuración de BP200/BP900 a continuación para obtener más detalles.
GetProperties() As roAssociativeArray
Devuelve una matriz asociativa de valores relacionados con la placa de botones BP200/BP900 conectada, incluidos hardware, encabezado y revisión. Este método solo se puede utilizar con un roControlPort instanciado con el parámetro Touchboard-<n>-GPIO .
SetPulseParams(parameters As roAssociativeArray) As Boolean
Especifica un período de tiempo, así como los segmentos de tiempo dentro de ese período, para pulsar LEDs GPIO. Estas propiedades se aplican a todas las salidas GPIO. A este método se le pasa una matriz asociativa con los siguientes parámetros:
- milisegundos: Un entero que especifica el período de tiempo (en ms) para el pulso
- rebanadas: Un entero que especifica el número de divisiones dentro del período de tiempo de milliseconds: Por ejemplo, un período de 500 ms con slices:2 se divide en dos segmentos de 250 ms.
SetPulse(button As Integer, bit-field As Integer) As Boolean
Establece el campo de bits off/on para un GPIO en particular. Utilice el parámetro rebanadas del método SetPulseParams() para determinar el número de bits en el campo de bits. Por ejemplo, especificar milisegundos:500, segmentos:2, y un campo de bits de 10 hará que el botón se encienda cada dos períodos de 250 milisegundos.
RemovePulse(button As Integer) As Boolean
Elimina el GPIO especificado del conjunto afectado por el pulso.
ifMessagePort
SetPort(port As Object)
Publica mensajes de tipo roControlUp y roControlDownroControlUp y roControlDown al puerto de mensajes adjunto.
ifUserData
SetUserData(user_data As Object)
Establece los datos del usuario que se devolverán cuando se activen eventos.
GetUserData() As Object
Devuelve los datos del usuario que se establecieron previamente mediante SetUserData(). Devolverá Inválido si no se ha establecido ningún dato.
ifIdentity
GetIdentity() As Integer
Devuelve un valor de identidad que se puede utilizar para asociar eventos roControlUp y roControlDown con este puerto de control.
La interfaz ifIdentity ha quedado obsoleta. Recomendamos utilizar la interfaz ifUserData en su lugar.
Ejemplos
Este script de ejemplo aplica pulsos temporizados a un conjunto de GPIO:
' set up button 2 and 3 to flash at 2Hz (i.e. on & off twice in a second) in an alternating ' fashion.
gpioPort = CreateObject("roControlPort", "BrightSign")
gpioPort.EnableOutput(2)
gpioPort.SetOutputState(2, true)
gpioPort.EnableOutput(3)
gpioPort.SetOutputState(3, true)
' set up pulse to have two time slices of 250ms each.
gpioPort.SetPulseParams({ milliseconds: 500, slices: 2 })
' button 2 will have slice 1 on and slice 2 off.
gpioPort.SetPulse(2, &h01)
' button 3 will have the reverse of button 2.
gpioPort.SetPulse(3, &h02)
' wait for a bit.
sleep(10000)
' stop pulsing on button 2.
gpioPort.RemovePulse(2)Este script de ejemplo habilita varias funciones alternativas en el GPIO:
c = CreateObject("roControlPort", "BrightSign")
'Enable serial port 1 on the GPIO.
c.EnableAlternateFunction(0, "serial1")
c.EnableAlternateFunction(6, "serial1")
s1 = CreateObject("roSerialPort", 1, 115200)
s1.SendLine("This is serial port 1")
mp = CreateObject("roMessagePort")
s1.SetLineEventPort(mp)
? wait(10000, mp)
'Switch serial port 0 from the 3.5mm serial port to the GPIO.
'[Note: it is advised use telnet/ssh or a script when testing this]
c.EnableAlternateFunction(4, "serial0")
c.EnableAlternateFunction(5, "serial0")
s = CreateObject("roSerialPort", 0, 115200)
s.SendLine("Hello on the console?")
mp = CreateObject("roMessagePort")
s.SetLineEventPort(mp)
? wait(10000, mp)
'Restore normal operation on serial port 0.
c.EnableAlternateFunction(4, "gpio")
c.EnableAlternateFunction(5, "gpio")
'Enable IR input on the GPIO.
c = CreateObject("roControlPort", "brightsign")
? c.EnableAlternateFunction(1, "irin1")
nexus_encodings = [ "NEC", "NEC32" ]
ir_gpio = CreateObject("roIRReceiver", { source: "GPIO", encodings: nexus_encodings })
mp = CreateObject("roMessagePort")
ir_gpio.SetPort(mp)
m = wait(10000, mp)
'Enable IR output on the GPIO (HDx23, HO523 only--the XT/XD models have a dedicated 3.5mm IR socket)
c.EnableAlternateFunction(2, "irout")
ir = CreateObject("roIRTransmitter", { destination: "GPIO"} )
ir.Send("NEC32", &H12345)Configuración de BP200/BP900
Para enviar una configuración a la placa de botones BP200/BP900, cree una instancia de roControlPort con el parámetro Touchboard-<n>-LED-SETUP y llame al método SetOutputValue() . Este método acepta dos enteros: el primer entero especifica uno de los tres tipos de comando (offsets); el segundo entero es un campo de bits compuesto por 32 bits.
- Offset 0: Configura la placa de botones usando un campo de bits que se divide en cuatro bytes de ocho bits cada uno. Cada byte es una parte independiente de la configuración. En el script, estos bytes deben enumerarse de derecha a izquierda en valor hexadecimal (es decir, Byte 1 + Byte 2 + Byte 3 + Byte 4).
- Byte 1: Especifica el tipo de configuración para la placa de botones. Actualmente, el único tipo de configuración es para salida LED, que se especifica con el valor &hA0.
- Byte 2: El número o los números de botón que se configurarán. Los botones se numeran comenzando desde 1. El valor se establece en 0 (&h00) si este comando no es necesario.
- Byte 3: La configuración del campo de bits LED. Este valor especifica cuántos bits de encendido/apagado deben usarse (hasta 32 bits) cuando se llama a SetOutputValue() en una instancia de Touchboard-<n>-LED (consulte la sección Salida LED de BP200/BP900 a continuación para obtener detalles). Establezca el valor en 0 (&h00) si este comando no es necesario (el campo de bits se establecerá en ocho bits de forma predeterminada).
- Byte 4: Este valor actualmente siempre se establece en 0 (&h00).
- Offset 1: Deshabilita botones en la placa de botones según los valores del campo de bits. Cada botón se deshabilita individualmente estableciendo los bits 0-10: Por ejemplo, pasar el valor hexadecimal &h00000008 deshabilitará solo el botón 4.
- Offset 2: Deshabilita LED en la placa de botones según los valores del campo de bits. Cada LED se deshabilita individualmente estableciendo los bits 0-10: Por ejemplo, pasar el valor hexadecimal &h00000080 deshabilitará solo el LED del botón 8.
Deshabilitar un LED de botón no deshabilitará automáticamente el botón en sí (y viceversa). Para deshabilitar tanto el botón como el LED, haga llamadas independientes a SetOutputValue() para Offset 1 y Offset 2.
Salida LED de BP200/BP900
Para controlar el comportamiento de los LED de botones individuales, cree una instancia de roControlPort con el parámetro Touchboard-<n>-LED y luego pase campos de bits por LED al método SetOutputValue() . Este método acepta dos enteros: el primer entero especifica el número de botón (0-11), mientras que el segundo entero usa un campo de bits para especificar el comportamiento de encendido/apagado del LED del botón. El tamaño del campo de bits (hasta 32 bits) se determina con el valor Offset 0 – Byte 3 descrito en la sección anterior.
Cada bit especifica el comportamiento de encendido/apagado de un único ciclo, y las placas de botones BP200/BP900 funcionan aproximadamente a 11Hz. Por ejemplo, si desea que un LED realice un ciclo cada dos segundos, deberá establecer el valor Offset 0 – Byte 3 en &h16 (22 bits) y el propio campo de bits en &h3FF800 (0000000000011111111111).
Este script de ejemplo configura un BP900 para que “parpadee” apagando cada LED de botón en un punto diferente del ciclo:
led=CreateObject("roControlPort", "TouchBoard-0-LED")
led_setup=CreateObject("roControlPort", "TouchBoard-0-LED-SETUP")
led_setup.SetOutputValue(0, &h000B00A0)
led.SetOutputValue(0, &h07fe)
led.SetOutputValue(1, &h07fd)
led.SetOutputValue(2, &h07fb)
led.SetOutputValue(3, &h07f7)
led.SetOutputValue(4, &h07ef)
led.SetOutputValue(5, &h07df)
led.SetOutputValue(6, &h07bf)
led.SetOutputValue(7, &h077f)
led.SetOutputValue(8, &h06ff)
led.SetOutputValue(9, &h05ff)
led.SetOutputValue(10, &h03ff)Consulte controlportcontrolport#Example para ver el ejemplo equivalente (configurar un BP900 para que parpadee) en JavaScript.