Le mostramos cómo usar las teclas de un Bluetooth control remoto (con un dongle USB) para controlar la función de espera, aumentar y bajar el volumen, y controlar la cámara de un dispositivo de sala o de escritorio. Creamos una macro que escucha eventos relevantes y lleva a cabo las acciones asociadas mediante la API del dispositivo de sala o de escritorio.

La característica de dispositivo de entrada USB de otros fabricantes se describe en este artículo .

En el siguiente ejemplo, debe introducir el texto que está escrito en fuente normal. El texto en cursiva es la respuesta que se recibe desde el dispositivo de sala o de escritorio.

1

Inicie sesión en el dispositivo de sala o de escritorio en SSH. Necesita un usuario administrador local.

2

Configure el dispositivo para permitir el uso de un puerto USB control remoto.


       xConfiguration Peripherals InputDevice Mode: On 
      ** end OK  
               

 

Puede comprobar si la configuración está activa o desactivada con este comando:


        xConfiguration Peripherals InputDevice Mode 
        *c xConfiguration Peripherals InputDevice Mode: On ** end OK  
                  
3

Regístrese para obtener comentarios, de modo que se nos notifique cuando se presionen control remoto botones de pantalla y se lanzarán.


       xFeedback Register /event/userinterface/inputdevice 
       ** end OK  
               

 

Puede comprobar los comentarios para los que está registrado el dispositivo con este comando:


        xFeedback list 
       /event/userinterface/inputdevice ** end OK  
                  
4

Presione y suelte un botón en el control remoto para comprobar que funcione el registro de comentarios.

Esta acción genera dos eventos: Presione y liberada. Si presiona y presiona un botón, verá el evento Presionado hasta que suelte el botón. Luego se genera el evento Lanzado.

Estos eventos se emiten al presionar y soltar la tecla Entrar:

 
                   *e UserInterface InputDevice Key Action Key: KEY_ENTER *e UserInterface InputDevice Key Action Code: 28 *e UserInterface InputDevice Key Action Type: Pressed ** end *e UserInterface InputDevice Key Action Key: KEY_ENTER *e UserInterface InputDevice Key Action Code: 28 *e UserInterface InputDevice Key Action Type: Released ** end  
               
5

Escriba una macro que escuche los eventos InputDevice relevantes y lleve a cabo las acciones asociadas mediante la API del dispositivo.

  • Haga que los botones de modo de espera, de volumen hacia arriba y de bajar volumen se volveran a poner en marcha. Cuando la macro ve un evento que contiene_VOLUMEN CLAVE,__VOLUMEN EN VOLUMEN CLAVE o SUSPENSIÓN DE CLAVE, ejecuta los comandos relacionados.

  • Cree una función de control de cámara para las teclas de flecha. Queremos seguir moviendo la cámara mientras se pulsa el botón. Cuando el botón se lanza, el movimiento de la cámara se detiene. Cuando la macro ve un evento que contiene KEY_LEFT, KEY_RIGHT, KEY_UP o KEY_DOWN, ejecuta los comandos relacionados.


       const xapi = require('xapi'); function com(command, args='') { xapi.command(command, args); log(command + ' ' + JSON.stringify(args)); } function log(event) { console.log(event); } function notify(message) { xapi.command('UserInterface Message TextLine Display', { Text: message, duration: 3 }); } function cameraControl(motor, direction, cameraId='1') { com('Camera Ramp', { 'CameraId': cameraId, [motor]: direction }); } function init() { let standbyState; xapi.status.get('Standby').then((state) => {standbyState = state.State === 'Off' ? false : true; }); xapi.status.on('Standby', state => { standbyState = state.State === 'Off' ? false : true; }); xapi.event.on('UserInterface InputDevice Key Action', press => { if (press.Type == "Pressed") { switch (press.Key) { case "KEY_LEFT": cameraControl('Pan', 'Left'); break; case "KEY_RIGHT": cameraControl('Pan', 'Right'); break; case "KEY_UP": cameraControl('Tilt', 'Up'); break; case "KEY_DOWN": cameraControl('Tilt', 'Down'); break; default: break; } } else if (press.Type == "Released") { switch (press.Key) { case "KEY_LEFT": cameraControl('Pan', 'Stop'); break; case "KEY_RIGHT": cameraControl('Pan', 'Stop'); break; case "KEY_UP": cameraControl('Tilt', 'Stop'); break; case "KEY_DOWN": cameraControl('Tilt', 'Stop'); break; case 'KEY_VOLUMEUP': com('Audio Volume Increase'); break; case 'KEY_VOLUMEDOWN': com('Audio Volume Decrease'); break; case 'KEY_SLEEP': com(standbyState ? 'Standby Deactivate' : 'Standby Activate'); break; default: break; } } }); } init();